{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction to Quantitative Finance\n",
    "\n",
    "Copyright (c) 2019 Python Charmers Pty Ltd, Australia, <https://pythoncharmers.com>. All rights reserved.\n",
    "\n",
    "<img src=\"img/python_charmers_logo.png\" width=\"300\" alt=\"Python Charmers Logo\">\n",
    "\n",
    "Published under the Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license. See `LICENSE.md` for details.\n",
    "\n",
    "Sponsored by Tibra Global Services, <https://tibra.com>\n",
    "\n",
    "<img src=\"img/tibra_logo.png\" width=\"300\" alt=\"Tibra Logo\">\n",
    "\n",
    "\n",
    "## Module 2.6: Overfitting\n",
    "\n",
    "### 2.6.1 Problems with Overfitting\n",
    "\n",
    "We reviewed overfitting and underfitting in previous modules. In this module we will cover overfitting in more detail. Underfitting is the case when your model is too simplistic to describe the data. For instance, trying to fit seasonal data with a linear regression model and no seasonal variables.\n",
    "\n",
    "Overfitting is the opposite, when your model is *too* complicated for your data, leading to the model learning too much. This may not sound like a problem, but it leads to a situation where you have a very low error in your training data with a very **high** error in your testing data. The cause? Your model is learning the inherent noise in your dataset, that would be smoothed out or ignored in a simpler model.\n",
    "\n",
    "This also explains why simpler models are often chosen for many problems. This whole series of modules has looked at linear models, ARIMA and GARCH as the main model types. Each of these is a fairly simple relationship of inputs to outputs. While you can use them in complicated ways, the simplicity of the models allows for noise to be smoothed out, and the underlying trends and concepts to be learned.\n",
    "\n",
    "To see overfitting in data, fit a polynomial with a high degree to some linear data with noise:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%run setup.ipy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# y = mx + c + e\n",
    "x = np.linspace(0, 10, 30)\n",
    "error = np.random.randn(len(x)) * 5\n",
    "y = x * 3 + 1 + error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x216b7658cd0>]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGgCAYAAAAKKQXsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAp3klEQVR4nO3df3DU9Z3H8deyQEDJrheU/GA3EiknKg3T+jPFWCiplDpMcMndVOwVW6c3OsFL4O5q6WlbrtpYb64Ntorau7HXGQM9mUVPb9BBJDHeAUU0p1zbVGgclpCEO+fYhTgszOZ7f3y7kSUbyCa73+93v/t8zOzs7Gc/2XwSo9+Xn+/n8/54DMMwBAAAYJFJdg8AAAAUFsIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALDUhMLHY489Jo/Ho+bm5uG206dPq7GxUTNnztSMGTO0atUqDQwMTHScAADAJSaP9wv379+vZ555RtXV1Snt69at07//+7/rhRdekN/v19q1axUKhfQf//EfY/rcoaEhHTt2TMXFxfJ4POMdHgAAsJBhGDp58qQqKio0adJF5jaMcTh58qQxb948Y+fOncbnP/95o6mpyTAMwzhx4oQxZcoU44UXXhju+9vf/taQZOzZs2dMnx2JRAxJPHjw4MGDB488fEQikYte68c189HY2Kg77rhDdXV1euSRR4bbDxw4oLNnz6qurm64bf78+aqsrNSePXt0yy23jPiseDyueDw+/Nr44yG7kUhEPp9vPMMDAAAWi8ViCgaDKi4uvmjfjMPH1q1b9c4772j//v0j3uvv79fUqVN12WWXpbSXlpaqv78/7ee1tLRo48aNI9p9Ph/hAwCAPDOWJRMZLTiNRCJqamrS888/r2nTpo17YOfasGGDotHo8CMSiWTlcwEAgDNlFD4OHDig48eP67Of/awmT56syZMnq6OjQ0888YQmT56s0tJSnTlzRidOnEj5uoGBAZWVlaX9zKKiouFZDmY7AABwv4xuuyxdulTvv/9+StvXv/51zZ8/Xw8++KCCwaCmTJmiXbt2adWqVZKk7u5uHTlyRDU1NdkbNQAAyFsZhY/i4mItWLAgpe3SSy/VzJkzh9vvvfderV+/XiUlJfL5fHrggQdUU1OTdrEpAAAoPOOu8zGan/zkJ5o0aZJWrVqleDyuZcuW6amnnsr2twEAAHnKYyT3tjpELBaT3+9XNBpl/QcAAHkik+s3Z7sAAABLET4AAIClsr7mAwAAx0skpM5Oqa9PKi+Xamslr9fuURUMwgcAoLCEw1JTk3T06CdtgYC0aZMUCtk3rgLCbRcAQOEIh6WGhtTgIUm9vWZ7OGzPuAoM4QMAUBgSCXPGI90mz2Rbc7PZDzlF+AAAFIbOzpEzHucyDCkSMfshpwgfAIDC0NeX3X4YN8IHAKAwlJdntx/GjfABACgMtbXmrhaPJ/37Ho8UDJr9kFOEDwBAYfB6ze200sgAknzd2kq9DwsQPgAAhSMUkrZtk2bPTm0PBMx26nxYgiJjAIDCEgpJ9fVUOLUR4QMAUHi8XmnxYrtHUbC47QIAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBSGYWPzZs3q7q6Wj6fTz6fTzU1NdqxY8fw+4sXL5bH40l53HfffVkfNAAAyF+TM+kcCAT02GOPad68eTIMQ//yL/+i+vp6vfvuu7ruuuskSd/85jf193//98Nfc8kll2R3xAAAIK9lFD5WrFiR8vrRRx/V5s2btXfv3uHwcckll6isrCx7IwQAAK4y7jUfiURCW7du1eDgoGpqaobbn3/+eV1++eVasGCBNmzYoI8//viCnxOPxxWLxVIeAIACkEhI7e3Sli3mcyJh94hgkYxmPiTp/fffV01NjU6fPq0ZM2Zo+/btuvbaayVJq1ev1pVXXqmKigq99957evDBB9Xd3a1wODzq57W0tGjjxo3j/wkAAPknHJaamqSjRz9pCwSkTZukUMi+ccESHsMwjEy+4MyZMzpy5Iii0ai2bdumf/qnf1JHR8dwADnXG2+8oaVLl+rQoUOaO3du2s+Lx+OKx+PDr2OxmILBoKLRqHw+X4Y/DgDA8cJhqaFBOv/y4/GYz9u2EUDyUCwWk9/vH9P1O+Pwcb66ujrNnTtXzzzzzIj3BgcHNWPGDL366qtatmzZmD4vk8EDAPJMIiHNmZM643Euj8ecAenpkbxeS4eGicnk+j3hOh9DQ0MpMxfn6urqkiSVl5dP9NsAANygs3P04CGZsyGRiNkPrpXRmo8NGzZo+fLlqqys1MmTJ9XW1qb29na99tprOnz4sNra2vTlL39ZM2fO1Hvvvad169bptttuU3V1da7GDwDIJ3192e2HvJRR+Dh+/Li+9rWvqa+vT36/X9XV1Xrttdf0xS9+UZFIRK+//rpaW1s1ODioYDCoVatW6aGHHsrV2AEA+WasM+FunjFPJMyZnb4+8+esrS24W0wTXvORbaz5AAAXS6756O0dueBUcv+aDxfv8rF0zQcAAGPm9ZoXWumT3S1Jydetre4NHg0NI9e89Paa7RcoS+E2hA8AgLVCIXM77ezZqe2BgHu32SYS5oxHutmeZFtzc8EUWsu4yBgAABMWCkn19YWz9iGTXT6LF1s2LLsQPgAA9vB6C+JCK4ldPufhtgsAALnGLp8UhA8AAHKtttZc03L+Itskj0cKBs1+BYDwAQBArhXyLp80CB8AAFihEHf5jIIFpwAAWKXQdvmMgvABAICVCmmXzyi47QIAACxF+AAAAJYifAAAAEux5gMAChVHu8MmhA8AKEQuPtodzsdtFwAoNBztDpsRPgCgkHC0OxyA8AEAhSSTo92BHCF8AEAh4Wh3OADhAwAKCUe7wwEIHwBQSDjaHQ5A+ACAQsLR7nAAwgcAFBqOdofNKDIGAIWIo90Lk0Oq2hI+AKBQcbR7YXFQVVtuuwAA4HYOq2pL+AAAwM0cWNWW8AEAgJs5sKot4QMAADdzYFVbwgcAAG7mwKq2hA8AANzMgVVtCR8AALiZA6vaEj4AAHA7h1W1pcgYAACZcEiV0Iw5qKot4QMAgLFyUJXQcXFIVVtuuwAAMBYOqxKazzIKH5s3b1Z1dbV8Pp98Pp9qamq0Y8eO4fdPnz6txsZGzZw5UzNmzNCqVas0MDCQ9UEDAGApB1YJzWcZhY9AIKDHHntMBw4c0Ntvv60vfOELqq+v13//939LktatW6eXX35ZL7zwgjo6OnTs2DGF8mEaCgCAC3FgldB8ltGajxUrVqS8fvTRR7V582bt3btXgUBA//zP/6y2tjZ94QtfkCQ999xzuuaaa7R3717dcsst2Rs1AKCwWb3o0ylVQvN1set5xr3mI5FIaOvWrRocHFRNTY0OHDigs2fPqq6ubrjP/PnzVVlZqT179oz6OfF4XLFYLOUBAMCowmFpzhxpyRJp9Wrzec6c3K65cEKVUDt+7hzJOHy8//77mjFjhoqKinTfffdp+/btuvbaa9Xf36+pU6fqsssuS+lfWlqq/v7+UT+vpaVFfr9/+BEMBjP+IQAABcKuRZ92Vwl12WLXjMPH1Vdfra6uLu3bt0/333+/1qxZo9/85jfjHsCGDRsUjUaHH5FIZNyfBQBwMTsXfdpZJdSFi10zDh9Tp07Vpz71KV1//fVqaWnRwoULtWnTJpWVlenMmTM6ceJESv+BgQGVlZWN+nlFRUXDu2eSDwAARrB70addVULt/rlzYMJ1PoaGhhSPx3X99ddrypQp2rVr1/B73d3dOnLkiGpqaib6bQAAhc4Jiz5DIenDD6Xdu6W2NvO5pye3Bcac8HNnWUa7XTZs2KDly5ersrJSJ0+eVFtbm9rb2/Xaa6/J7/fr3nvv1fr161VSUiKfz6cHHnhANTU17HQBAEycExZ9StZXCXXKz51FGYWP48eP62tf+5r6+vrk9/tVXV2t1157TV/84hclST/5yU80adIkrVq1SvF4XMuWLdNTTz2Vk4EDAApMctFnb2/69Q8ej/m+hUfDW8KFP7fHMNL9JPaJxWLy+/2KRqOs/wAApEru+pBSL8TJRZ82nNBqiTz4uTO5fnO2CwAgfzjsaHjLuOznZuYDAJB/XFLpM2MO/rkzuX5ntOYDAABHcMjR8JZzyc/NbRcAAGApwgcAALAU4QMAAFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCkqnAJwBweXnQaQivABIP+Fw1JTk3T06CdtgYC0aVPeHbgFFAJuuwDIb8mjxs8NHpLU22u2h8P2jAvAqAgfAPJXImHOeKQ7nDvZ1txs9gPgGIQPAPmrs3PkjMe5DEOKRMx+AByD8AEgf/X1ZbcfAEsQPgDkr/Ly7PYDYAnCB4D8VVtr7mrxeNK/7/FIwaDZD4BjED4A5C+v19xOK40MIMnXra3U+wAchvABIL+FQtK2bdLs2antgYDZTp0PwHEoMgYg/4VCUn09FU6BPEH4AOAOXq+0eLHdowAwBtx2AQAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClMgofLS0tuvHGG1VcXKxZs2Zp5cqV6u7uTumzePFieTyelMd9992X1UEDAID8lVH46OjoUGNjo/bu3audO3fq7Nmzuv322zU4OJjS75vf/Kb6+vqGH48//nhWBw0AAPJXRqfavvrqqymvf/GLX2jWrFk6cOCAbrvttuH2Sy65RGVlZdkZIQAAcJUJrfmIRqOSpJKSkpT2559/XpdffrkWLFigDRs26OOPPx71M+LxuGKxWMoDAAC4V0YzH+caGhpSc3OzFi1apAULFgy3r169WldeeaUqKir03nvv6cEHH1R3d7fC4XDaz2lpadHGjRvHOwwAAJBnPIZhGOP5wvvvv187duzQW2+9pUAgMGq/N954Q0uXLtWhQ4c0d+7cEe/H43HF4/Hh17FYTMFgUNFoVD6fbzxDAwAAFovFYvL7/WO6fo9r5mPt2rV65ZVX9Oabb14weEjSzTffLEmjho+ioiIVFRWNZxgA4AyJhNTZKfX1SeXlUm2t5PXaPSrAsTIKH4Zh6IEHHtD27dvV3t6uqqqqi35NV1eXJKm8vHxcAwQARwuHpaYm6ejRT9oCAWnTJikUsm9cgINlFD4aGxvV1taml156ScXFxerv75ck+f1+TZ8+XYcPH1ZbW5u+/OUva+bMmXrvvfe0bt063Xbbbaqurs7JDwAAtgmHpYYG6fy71729Zvu2bQQQII2M1nx4PJ607c8995zuueceRSIRffWrX9XBgwc1ODioYDCoO++8Uw899NCY129kcs8IAGyTSEhz5qTOeJzL4zFnQHp6uAWDgpCzNR8XyynBYFAdHR2ZfCQA5KfOztGDh2TOhkQiZr/Fiy0bFpAPONsFAMajry+7/YACQvgAgPEY6yJ6FtsDIxA+AGA8amvNNR2jrIWTxyMFg2Y/ACkIHwAwHl6vuZ1WGhlAkq9bW1lsCqRB+ACA8QqFzO20s2entgcCbLMFLmDcZ7sAAGQGjPp6KpwCGSB8AMBEeb1spwUywG0XAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALAU4QMAAFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKT7R4AAGACEgmps1Pq65PKy6XaWsnrtXtUwAURPgAgX4XDUlOTdPToJ22BgLRpkxQK2Tcu4CK47QIA+SgclhoaUoOHJPX2mu3hsD3jAsaA8AEA+SaRMGc8DGPke8m25mazH+BAhA8AyDednSNnPM5lGFIkYvYDHIjwAQD5pq8vu/0AixE+ACDflJdntx9gMcIHAOSb2lpzV4vHk/59j0cKBs1+gAMRPgAg33i95nZaaWQASb5ubaXeBxyL8AEA+SgUkrZtk2bPTm0PBMx26nzAwSgyBgD5KhSS6uupcIq8Q/gAgHzm9UqLF9s9CiAj3HYBAACWyih8tLS06MYbb1RxcbFmzZqllStXqru7O6XP6dOn1djYqJkzZ2rGjBlatWqVBgYGsjpoAACQvzIKHx0dHWpsbNTevXu1c+dOnT17VrfffrsGBweH+6xbt04vv/yyXnjhBXV0dOjYsWMKsfAJAAD8kccw0h0OMDb/8z//o1mzZqmjo0O33XabotGorrjiCrW1tamhoUGS9Lvf/U7XXHON9uzZo1tuuWXEZ8TjccXj8eHXsVhMwWBQ0WhUPp9vvEMDAAAWisVi8vv9Y7p+T2jNRzQalSSVlJRIkg4cOKCzZ8+qrq5uuM/8+fNVWVmpPXv2pP2MlpYW+f3+4UcwGJzIkAAAgMONO3wMDQ2publZixYt0oIFCyRJ/f39mjp1qi677LKUvqWlperv70/7ORs2bFA0Gh1+RCKR8Q4JAADkgXFvtW1sbNTBgwf11ltvTWgARUVFKioqmtBnAACA/DGumY+1a9fqlVde0e7duxUIBIbby8rKdObMGZ04cSKl/8DAgMrKyiY0UAAA4A4ZhQ/DMLR27Vpt375db7zxhqqqqlLev/766zVlyhTt2rVruK27u1tHjhxRTU1NdkYMAADyWka3XRobG9XW1qaXXnpJxcXFw+s4/H6/pk+fLr/fr3vvvVfr169XSUmJfD6fHnjgAdXU1KTd6QIAAApPRlttPaMc3/zcc8/pnnvukWQWGfvrv/5rbdmyRfF4XMuWLdNTTz015tsumWzVAQAAzpDJ9XtCdT5ygfABAED+sazOBwAAQKYIHwAAwFLjrvMBAChwiYTU2Sn19Unl5VJtreT12j0q5AHCBwAgc+Gw1NQkHT36SVsgIG3aJHGYKC6C2y4AgMyEw1JDQ2rwkKTeXrM9HLZnXMgbhA8AwNglEuaMR7qNksm25mazHzAKwgcAYOw6O0fOeJzLMKRIxOwHjILwAQAYu76+7PZDQSJ8AADGrrw8u/1QkAgfAICxq601d7WMctyGPB4pGDT7AaMgfAAAxs7rNbfTSiMDSPJ1ayv1PnBBhA8AQGZCIWnbNmn27NT2QMBsp84HLoIiYwCAzIVCUn09FU4xLoQPAMD4eL3S4sV2jwJ5iNsuAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWYqstACQS1KsALET4AFDYwmGpqSn1mPhAwCwhTqVOICe47QKgcIXDUkNDavCQpN5esz0ctmdcgMsRPgAUpkTCnPEwjJHvJduam81+ALKK8AGgMHV2jpzxOJdhSJGI2Q9AVhE+ABSmvr7s9gMwZoQPAIWpvDy7/QCMGeEDQGGqrTV3tXg86d/3eKRg0OwHIKsIHwAKk9drbqeVRgaQ5OvWVup9ADlA+ADSSSSk9nZpyxbzmR0P7hQKSdu2SbNnp7YHAmY7dT6AnKDIGHA+ik4VllBIqq+nwilgIY9hpNvkbp9YLCa/369oNCqfz2f3cFBokkWnzv/XIjkNz/8NA0BamVy/ue0CJFF0CgAsQfgAkig6BQCWIHwASRSdAgBLZBw+3nzzTa1YsUIVFRXyeDx68cUXU96/55575PF4Uh5f+tKXsjVeIHcoOgUAlsg4fAwODmrhwoV68sknR+3zpS99SX19fcOPLVu2TGiQgCUoOgUAlsh4q+3y5cu1fPnyC/YpKipSWVnZuAcF2CJZdKqhwQwa5y48LZSiU4kEW04B5FxO1ny0t7dr1qxZuvrqq3X//ffro48+GrVvPB5XLBZLeQC2KeSiU+GwNGeOtGSJtHq1+TxnjtkOAFk0oTofHo9H27dv18qVK4fbtm7dqksuuURVVVU6fPiwvvOd72jGjBnas2ePvGn+D+r73/++Nm7cOKKdOh+wVaHNAFDfBMAEZVLnI+vh43x/+MMfNHfuXL3++utaunTpiPfj8bji8XjK4IPBIOEDsEoiYc5wjLbN2OMxZ356etwdwABMiKOKjF111VW6/PLLdejQobTvFxUVyefzpTwAWIj6JgAslvPwcfToUX300UcqZ3si4EzUNwFgsYx3u5w6dSplFqOnp0ddXV0qKSlRSUmJNm7cqFWrVqmsrEyHDx/Wt771LX3qU5/SsmXLsjpwAFlCfRMAFst4zUd7e7uWLFkyon3NmjXavHmzVq5cqXfffVcnTpxQRUWFbr/9dv3gBz9QaWnpmD6fg+UAiyXXfPT2pj/XhjUfAMbAsgWnuUD4AGyQ3O0ipa9vwm4XABfhqAWnyHOJhNTeLm3ZYj5zoqs7FXJ9EwCWy3jNBwpIOGweMX/uTohAwKwCysXIfUIhqb6+sOqbALAFt12QHkWnAAAZ4LYLJiaRMGc80uXSZFtzM7dgAADjQvjASBSdAgDkEOEDI1F0CgCQQ4QPjETRKQBADhE+MFJtrbmrJbm49HwejxQMmv0AAMgQ4QMjeb3mdlppZABJvm5tZQsmAGBcCB9Ij6JTAIAcocgYRkfRKQBADhA+cGFer7R4sd2jAAC4CLddAACApQgfAADAUoQPAABgKdZ8AE6TSLDIF4CrET4AJwmHzUP9zj1bJxAw666wvdmdCJsoQNx2AZwiHJYaGkYe6tfba7aHw/aMC7kTDktz5khLlkirV5vPc+bwzxquR/gAnCCRMGc8DGPke8m25mazH9yBsIkCRvgAnKCzc+RF6FyGIUUiZj/kP8ImChzhA3CCvr7s9oOzETZR4AgfgBOUl2e3H5yNsIkCR/gAnKC21tzVcv4pwkkejxQMmv2Q/wibKHCED8AJvF5zO600MoAkX7e2sgXTLQibKHCED8ApQiFp2zZp9uzU9kDAbKfOh3sQNlHgPIaRbrm1fWKxmPx+v6LRqHw+n93DAaxH0anCka6oXDBoBg/CJvJMJtdvwgcA2ImwCZfI5PpNeXUAsJPXKy1ebPcoAEsRPgBkD/8XD2AMCB8AsoND8QCMEbtdAEwc55QAyADhA3CTREJqb5e2bDGfrTgbhHNKAGSI8AG4hV3Hs3NOCYAMET4AN7DztgfnlADIEOEDyHd23/bgnBIAGco4fLz55ptasWKFKioq5PF49OKLL6a8bxiGvvvd76q8vFzTp09XXV2dPvjgg2yNF8D57L7twTklADKUcfgYHBzUwoUL9eSTT6Z9//HHH9cTTzyhp59+Wvv27dOll16qZcuW6fTp0xMeLIA07L7twTklADKUcfhYvny5HnnkEd15550j3jMMQ62trXrooYdUX1+v6upq/fKXv9SxY8dGzJAAyBIn3PbgUDwAGchqkbGenh719/errq5uuM3v9+vmm2/Wnj179JWvfGXE18TjccXj8eHXsVgsm0OCnah2aY3kbY/e3vTrPjwe8/1c3/YIhaT6+vH/M+fvBSgYWQ0f/f39kqTS0tKU9tLS0uH3ztfS0qKNGzdmcxhwAqpdWid526OhwQwa5wYQq297jPecEv5egIJi+26XDRs2KBqNDj8ikYjdQ8JEUe3Sevl824O/F6DgZDV8lJWVSZIGBgZS2gcGBobfO19RUZF8Pl/KA3nM7m2fhSwUkj78UNq9W2prM597epwdPPh7AQpSVsNHVVWVysrKtGvXruG2WCymffv2qaamJpvfCk5l97bPQpe87XHXXeaz09dM8PcCFKSM13ycOnVKhw4dGn7d09Ojrq4ulZSUqLKyUs3NzXrkkUc0b948VVVV6eGHH1ZFRYVWrlyZzXHDqeze9on8wt8LUJAyDh9vv/22lixZMvx6/fr1kqQ1a9boF7/4hb71rW9pcHBQf/mXf6kTJ07o1ltv1auvvqpp06Zlb9RwLids+5TYOZEvnPL3AsBSHsNId7PVPrFYTH6/X9FolPUf+SiRMA8zu9i2z56e3IUBdk7kDyf8vQDIikyu37bvdoHL2F3tkp0T+cXuvxcAtiB8IPvs2vbJzon8lM/bhAGMC7ddkDtWr7tob5fOWY80qt27x1cIC7nFOh0gr2Vy/c5qhVPkSL7+R3m81S7Hi50T+c3qvxcAtiF8OB2LJ8eOnRMAkBdY8+FkLJ7MTPKAtfMXLiZ5PFIwmPsD1hIJ8xbQli3mM2tMACAF4cOpWDyZOSfsnAiHza2jS5ZIq1ebz3PmEBQB4ByED6ei7PT42LlzgpkqABgT1nw4FYsnxy8UkurrrV2ke7GZKo/HnKmqr8+PxcIAkEOED6di8eTEWL1zIpOZKnZ0AChw3HZxKqcsnsTYMFMFAGNG+HAqJyyexNgxUwUAY0b4cDLKTucPZqoAYMxY8+F0diyeROaSM1UNDWbQOHfhKTNVAJCC8JEPKDudH5IzVekq0ra2MlMFAH9E+ACyiZkqALgowgeQbcxUAcAFseAUAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALAURcaskEhQ8RIAgD8ifORaOJz+rI9NmzjrAwBQkLjtkkvhsHnK6bnBQ5J6e832cDj3Y0gkpPZ2acsW8zmRyP33BADgAggfuZJImDMe5x6tnpRsa27ObRgIh6U5c6QlS6TVq83nOXOsCT0AAIyC8JErnZ0jZzzOZRhSJGL2ywUnzLoAAJAG4SNX+vqy2y8TTph1AQBgFISPXCkvz26/TNg96wIAwAUQPnKlttbc1eLxpH/f45GCQbNfttk56wIAwEUQPnLF6zW300ojA0jydWtrbup92DnrAgDARRA+cikUkrZtk2bPTm0PBMz2XNX5sHPWBQCAi6DIWK6FQlJ9vbUVTpOzLg0NZtA4d+FprmddAAC4iKzPfHz/+9+Xx+NJecyfPz/b3ya/eL3S4sXSXXeZz1Zc9O2adQEA4CJyMvNx3XXX6fXXX//km0xmgsUWdsy6AABwETlJBZMnT1ZZWdmY+sbjccXj8eHXsVgsF0MqXMlZFwAAHCInC04/+OADVVRU6KqrrtLdd9+tI0eOjNq3paVFfr9/+BEMBnMxJAAA4BAew0hXBnP8duzYoVOnTunqq69WX1+fNm7cqN7eXh08eFDFxcUj+qeb+QgGg4pGo/L5fNkcGgAAyJFYLCa/3z+m63fWw8f5Tpw4oSuvvFI//vGPde+99160fyaDBwAAzpDJ9TvndT4uu+wy/emf/qkOHTqU628FAADyQM7Dx6lTp3T48GGVU00TAAAoB+Hjb/7mb9TR0aEPP/xQ//mf/6k777xTXq9Xd911V7a/FQAAyENZ32p79OhR3XXXXfroo490xRVX6NZbb9XevXt1xRVXZPtbAQCAPJT18LF169Zsf2R2JBIU2wIAwAEKo/RoOCw1NUlHj37SFgiY559QZhwAAEu5/1TbcNg8YO3c4CFJvb1mezhsz7gAAChQ7g4fiYQ545GulEmyrbnZ7AcAACzh7vDR2TlyxuNchiFFIma/C0kkpPZ2acsW85mwAgDAuLl7zUdf38T7sV4EAICscvfMx1gLm43Wj/UiAABknbvDR22tOUvh8aR/3+ORgkGz3/lYLwIAQE64O3x4vebtEWlkAEm+bm1NX+8jW+tFAABACneHD8lcl7FtmzR7dmp7IGC2j7ZuIxvrRQAAwAjuXnCaFApJ9fWZVTid6HoRAACQVmGED8kMGosXj71/cr1Ib2/6dR8ej/l+uvUiAABgVO6/7TJeE1kvAgAARkX4uJDxrhcBAACjKpzbLuM1nvUiyA5OIgYAVyJ8jEWm60UwcVSWBQDX4rYLnIfKsgDgaoQPOAuVZQHA9QgfcBYqywKA6xE+4CxUlgUA1yN8wFmoLAsArkf4gLNM5CRiAEBeIHzAWagsCwCuR/iA81BZFgBcjSJjcCYqywKAaxE+4FxUlgUAV+K2CwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwlOMqnBqGIUmKxWI2jwQAAIxV8rqdvI5fiOPCx8mTJyVJwWDQ5pEAAIBMnTx5Un6//4J9PMZYIoqFhoaGdOzYMRUXF8tz/pHqExSLxRQMBhWJROTz+bL62fgEv2dr8Hu2Br9n6/C7tkaufs+GYejkyZOqqKjQpEkXXtXhuJmPSZMmKRAI5PR7+Hw+/rAtwO/ZGvyercHv2Tr8rq2Ri9/zxWY8klhwCgAALEX4AAAAliqo8FFUVKTvfe97Kioqsnsorsbv2Rr8nq3B79k6/K6t4YTfs+MWnAIAAHcrqJkPAABgP8IHAACwFOEDAABYivABAAAsRfgAAACWKpjw8eSTT2rOnDmaNm2abr75Zv3617+2e0iu09LSohtvvFHFxcWaNWuWVq5cqe7ubruH5XqPPfaYPB6Pmpub7R6K6/T29uqrX/2qZs6cqenTp+vTn/603n77bbuH5SqJREIPP/ywqqqqNH36dM2dO1c/+MEPxnQ4GS7szTff1IoVK1RRUSGPx6MXX3wx5X3DMPTd735X5eXlmj59uurq6vTBBx9YMraCCB+/+tWvtH79en3ve9/TO++8o4ULF2rZsmU6fvy43UNzlY6ODjU2Nmrv3r3auXOnzp49q9tvv12Dg4N2D8219u/fr2eeeUbV1dV2D8V1/u///k+LFi3SlClTtGPHDv3mN7/RP/7jP+pP/uRP7B6aq/zoRz/S5s2b9bOf/Uy//e1v9aMf/UiPP/64fvrTn9o9tLw3ODiohQsX6sknn0z7/uOPP64nnnhCTz/9tPbt26dLL71Uy5Yt0+nTp3M/OKMA3HTTTUZjY+Pw60QiYVRUVBgtLS02jsr9jh8/bkgyOjo67B6KK508edKYN2+esXPnTuPzn/+80dTUZPeQXOXBBx80br31VruH4Xp33HGH8Y1vfCOlLRQKGXfffbdNI3InScb27duHXw8NDRllZWXGP/zDPwy3nThxwigqKjK2bNmS8/G4fubjzJkzOnDggOrq6obbJk2apLq6Ou3Zs8fGkblfNBqVJJWUlNg8EndqbGzUHXfckfK3jez5t3/7N91www36sz/7M82aNUuf+cxn9POf/9zuYbnO5z73Oe3atUu///3vJUn/9V//pbfeekvLly+3eWTu1tPTo/7+/pT/fvj9ft18882WXBsdd6pttv3v//6vEomESktLU9pLS0v1u9/9zqZRud/Q0JCam5u1aNEiLViwwO7huM7WrVv1zjvvaP/+/XYPxbX+8Ic/aPPmzVq/fr2+853vaP/+/fqrv/orTZ06VWvWrLF7eK7x7W9/W7FYTPPnz5fX61UikdCjjz6qu+++2+6huVp/f78kpb02Jt/LJdeHD9ijsbFRBw8e1FtvvWX3UFwnEomoqalJO3fu1LRp0+wejmsNDQ3phhtu0A9/+ENJ0mc+8xkdPHhQTz/9NOEji/71X/9Vzz//vNra2nTdddepq6tLzc3Nqqio4PfsYq6/7XL55ZfL6/VqYGAgpX1gYEBlZWU2jcrd1q5dq1deeUW7d+9WIBCweziuc+DAAR0/flyf/exnNXnyZE2ePFkdHR164oknNHnyZCUSCbuH6Arl5eW69tprU9quueYaHTlyxKYRudPf/u3f6tvf/ra+8pWv6NOf/rT+4i/+QuvWrVNLS4vdQ3O15PXPrmuj68PH1KlTdf3112vXrl3DbUNDQ9q1a5dqampsHJn7GIahtWvXavv27XrjjTdUVVVl95BcaenSpXr//ffV1dU1/Ljhhht09913q6urS16v1+4husKiRYtGbBX//e9/ryuvvNKmEbnTxx9/rEmTUi9FXq9XQ0NDNo2oMFRVVamsrCzl2hiLxbRv3z5Lro0Fcdtl/fr1WrNmjW644QbddNNNam1t1eDgoL7+9a/bPTRXaWxsVFtbm1566SUVFxcP3zf0+/2aPn26zaNzj+Li4hHraC699FLNnDmT9TVZtG7dOn3uc5/TD3/4Q/35n/+5fv3rX+vZZ5/Vs88+a/fQXGXFihV69NFHVVlZqeuuu07vvvuufvzjH+sb3/iG3UPLe6dOndKhQ4eGX/f09Kirq0slJSWqrKxUc3OzHnnkEc2bN09VVVV6+OGHVVFRoZUrV+Z+cDnfT+MQP/3pT43Kykpj6tSpxk033WTs3bvX7iG5jqS0j+eee87uobkeW21z4+WXXzYWLFhgFBUVGfPnzzeeffZZu4fkOrFYzGhqajIqKyuNadOmGVdddZXxd3/3d0Y8Hrd7aHlv9+7daf+bvGbNGsMwzO22Dz/8sFFaWmoUFRUZS5cuNbq7uy0Zm8cwKCMHAACs4/o1HwAAwFkIHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgqf8Hi1PKhTgV14EAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x, y, 'ro')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here is what an appropriate model will find in this data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x216b98c6a10>]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGgCAYAAAAKKQXsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABNF0lEQVR4nO3deXxU9b3/8ddMVgiTQAgkhCTsZCGJCigiigsoIlICsatt1bb21osi0gVQkLJowLbW0mtd2t+1vbfS9loIroiKglVREcEkJITdLJBAWJIwkHXO749TwGAQEmbmzPJ+Ph7z4DFzJjOfGZHzzvd8v5+vzTAMAxEREREvsVtdgIiIiAQXhQ8RERHxKoUPERER8SqFDxEREfEqhQ8RERHxKoUPERER8SqFDxEREfEqhQ8RERHxKoUPERER8SqFDxEREfGqiwofS5cuxWazMXPmzNOPNTQ0MH36dHr27Em3bt3Izc2lurr6YusUERGRABHa2R/ctGkTzzzzDNnZ2W0ef+CBB3j11Vd54YUXiImJ4d5772XatGm8//77F/S6LpeL/fv343A4sNlsnS1PREREvMgwDOrr60lMTMRuP8/YhtEJ9fX1xpAhQ4w333zTuPbaa43777/fMAzDOHbsmBEWFma88MILp59bUlJiAMbGjRsv6LXLy8sNQDfddNNNN91088NbeXn5ec/1nRr5mD59OpMmTWL8+PEsWbLk9OObN2+mubmZ8ePHn34sLS2NlJQUNm7cyJVXXvml12psbKSxsfH0fePfm+yWl5cTHR3dmfJERETEy+rq6khOTsbhcJz3uR0OH3//+9/59NNP2bRp05eOVVVVER4eTvfu3ds8Hh8fT1VVVbuvl5eXx8KFC7/0eHR0tMKHiIiIn7mQKRMdmnBaXl7O/fffz/PPP09kZGSnC/uiuXPnUltbe/pWXl7ultcVERER39Sh8LF582YOHjzI8OHDCQ0NJTQ0lA0bNrB8+XJCQ0OJj4+nqamJY8eOtfm56upqEhIS2n3NiIiI06McGu0QEREJfB267DJu3DgKCwvbPHbXXXeRlpbG7NmzSU5OJiwsjHXr1pGbmwtAaWkpZWVljB492n1Vi4iIiN/qUPhwOBxkZma2eSwqKoqePXuefvyHP/whs2bNIjY2lujoaO677z5Gjx7d7mRTERERCT6d7vNxLr/97W+x2+3k5ubS2NjIhAkT+MMf/uDutxERERE/ZTNOrW31EXV1dcTExFBbW6v5HyIiIn6iI+dv7e0iIiIiXqXwISIiIl7l9jkfIiIiPs/lgrIyqK8HhwNSUuB8+5GI2yh8iIhIcCkpgfx82L4dGhogMhLS0mDqVEhPt7q6oKDwISIiwaOkBJYvh5oaSE6GqChwOmHLFigvhxkzFEC8QGNMIiISHFwuc8SjpgYyMiA6GkJCzD8zMszHV682nycepfAhIiLBoazMvNSSnAxnb35ms0FSkjkyUlZmTX1BROFDRESCQ329OccjKqr941FR5vH6eu/WFYQUPkREJDg4HObkUqez/eNOp3nc4fBuXUFI4UNERIJDSoq5qqW8HM5u7m0YUFFhTjZNSbGmviCi8CEiIsHBbjeX08bFQXEx1NZCS4v5Z3Gx+XhOjvp9eIG+YRERCR7p6eZy2ssug8OHYccO88/hw7XM1ovU50NERIJLejqkpqrDqYUUPkREJPjY7dC/v9VVBC3FPBEREfEqhQ8RERHxKoUPERER8SqFDxEREfEqhQ8RERHxKoUPERER8SqFDxEREfEqhQ8RERHxKoUPERER8SqFDxEREfEqhQ8RERHxKoUPERER8SqFDxEREfEqhQ8RERHxKoUPERER8SqFDxEREfEqhQ8RERHxKoUPERER8SqFDxEREfEqhQ8RERHxKoUPERER8aoOhY+nnnqK7OxsoqOjiY6OZvTo0axZs+b08euuuw6bzdbm9pOf/MTtRYuIiIj/Cu3Ik5OSkli6dClDhgzBMAz+8pe/MGXKFLZs2cKwYcMAuPvuu1m0aNHpn+natat7KxYRERG/1qHwMXny5Db3H3nkEZ566ik+/PDD0+Gja9euJCQkuK9CEREJTC4XlJVBfT04HJCSAnbNBggGHQofX9Ta2soLL7yA0+lk9OjRpx9//vnn+etf/0pCQgKTJ09m/vz5Xzn60djYSGNj4+n7dXV1nS1JRET8RUkJ5OfD9u3Q0ACRkZCWBlOnQnq61dWJh3U4fBQWFjJ69GgaGhro1q0b+fn5ZGRkAPCd73yHfv36kZiYSEFBAbNnz6a0tJRVq1ad8/Xy8vJYuHBh5z+BiIj4l5ISWL4camogORmiosDphC1boLwcZsxQAAlwNsMwjI78QFNTE2VlZdTW1vLPf/6TP/3pT2zYsOF0APmit99+m3HjxrFr1y4GDRrU7uu1N/KRnJxMbW0t0dHRHfw4IiLi01wuWLrUDBoZGWCznTlmGFBcDMOHw+zZugTjZ+rq6oiJibmg83eHRz7Cw8MZPHgwACNGjGDTpk387ne/45lnnvnSc0eNGgXwleEjIiKCiIiIjpYhIiL+qKzMvNSSnNw2eIB5PynJHBkpK4P+/S0pUTzvomOly+VqM3LxRVu3bgWgT58+F/s2IiISCOrrzTkeUVHtH4+KMo/X13u3LvGqDo18zJ07l4kTJ5KSkkJ9fT0rVqxg/fr1rF27lt27d7NixQpuueUWevbsSUFBAQ888ABjx44lOzvbU/WLiIg/cTjMyaVOJ7Q3NO90mscdDu/X5i1a5dOx8HHw4EG+//3vc+DAAWJiYsjOzmbt2rXceOONlJeX89Zbb/HEE0/gdDpJTk4mNzeXefPmeap2ERHxNykp5qqWc835qKgw53ykpFhXoydplQ/QiQmnntaRCSsiIuKHvrjaJSnpzGqXigqIiwvc1S7nWuVTXh4Qn7sj5+/gGucRERHrpaebJ9rLLoPDh2HHDvPP4cP9/gR8Ti6XOeJRU2OO+ERHQ0iI+WdGhvn46tXm84JAp5uMiYiIdFp6OqSmBs/cB63yaUPhQ0RErGG3B8WJFriwVT6VlUGzyidAI6aIiIgP+eIqn/YEwyqfL1D4EBER8bRTq3zKy81VPV90apVPenrgrvI5i8KHiIiIp9nt5nLauDizhXxtLbS0mH8WF5uP5+QE7pyXswTHpxQREbGaD63ysbrLhiacioiIeIvFq3wO1jfwy5e2MSwxhunXD/bKe7ZH4UNERMSbLFjlYxgGL3xSwZJXi6lraGFD6SG+O6ofMV3DvFrHKQofIiIiAWxfjZMH8wv5YPdhADL7RrMsN9uy4AEKHyIiIgGppdXFn97by2/f3EFji4vIMDs/vTGVu8b0JzTE2imfCh8iIiIBpqiyltkrC9i2vw6AqwfH8ejULFJ6drW4MpPCh4hIsNLW7gHnZFMrT7y1gz+9t5dWl0FMlzDmTUrnthFJ2M5u624hhQ8RkWCkrd0Dzge7apibX8jnh08AcGt2HxZMHkYvR4TFlX2ZwoeISLA519buW7aYHTgDdWfZAFV7oplHXivm/z6pAKBPTCSLp2QyPiPe4srOTeFDRCSYnL21+6mh+FNbuxcXm1u7p6bqEoyPMwyD1wqrWPDSNmqONwLw/dH9+PmEVByR1q1kuRAKHyIiwURbuweEA7Unmb96G2+VVAMwqFcUy3KzGdk/1uLKLozCh4hIMNHW7n7N5TJY8XEZS9ds53hjC2EhNu65bjDTrx9ERGiI1eVdMIUPEZFg8sWt3aOjv3w8yLZ29ye7Dh5n7qoCNu07CsClyd1ZlptNaoL//bdS+BARCSantnbfsqXtnA84s7X78OFBs7W7P2hqcfHMht38/u1dNLW66Boews8npPL90f0JsfvO8tmOUPgQEQkmp7Z2Ly83J5cmJZ1Z7VJREXRbu/u6LWVHmbOykNJq8zLYdam9WJKTSVIP32gW1lkKHyIiwebU1u6n+nxUVpqXWoYPN4OHltlaztnYwq/fKOXPH+zDMCA2KpwFkzP42iWJF9cszEcayyl8iIgEI4u3dpdzW196kIfyi6g8dhKAaZf1Zd6tGcRGhV/cC/tQYzmFDxGRYGXB1u5ybkecTSx6eRurt+4HoG/3Ljw6LYtrh/a6+Bf3scZyCh8iIiIWMgyDF7fuZ9ErxRxxNmG3wV1jBjDrxqFERbjhNO2DjeUUPkRERCxScfQED+UXsWHHIQDSEhwszc3m0uTu7nsTH2wsp/AhIiLiZa0ug798sI9fv1HKiaZWwkPt3D9uCD8eO5CwEDePPvhgYzmFDxERES/aXlXHnJWFbC0/BsAV/WPJy81iUK9unnlDH2wsp/AhIiLiBQ3NrTz5zi6eWr+bFpeBIyKUObek8e3LU7B7slmYDzaWU/gQERHxsE37jjBnZQG7DzkBuDEjnsVTMkmIifT8m/tgYzmFDxEREQ+pb2hm2evb+euHZQD0ckSw6GvDuDkz4eKahXWUjzWWU/gQERHpiAvsEvpmcTXzVxdRVdcAwDdHJvPgLenEdA3zdsUmH2osp/AhIiJyoS6gS+jB+gYWvlTMq4UHAOjfsyuPTsviqkFxVlZu8pHGcgofIiIiF+I8XUKN++7jBaeDJa8WU9fQQojdxt3XDGTm+CFEhoVYXb1P6dBYy1NPPUV2djbR0dFER0czevRo1qxZc/p4Q0MD06dPp2fPnnTr1o3c3Fyqq6vdXrSIiIhXnd0lNDoaQkJOdwn9/Fgjtz9fwC9WFlDX0EJm32henD6GORPTFDza0aHwkZSUxNKlS9m8eTOffPIJN9xwA1OmTGHbtm0APPDAA7z88su88MILbNiwgf379zNt2jSPFC4iIuI15+gS2mLAM619mJCSwwetDiJDbTx4Sxqr/3MMmX1jLCzYt9kMwzAu5gViY2P51a9+xW233UavXr1YsWIFt912GwDbt28nPT2djRs3cuWVV17Q69XV1RETE0NtbS3R7TVDERER8fbW8IWFsHixOWEzxBzJKHJ1ZU5zf4oMs3PomBP7efRbI+h31XDP1eHtz90BHTl/d3rOR2trKy+88AJOp5PRo0ezefNmmpubGT9+/OnnpKWlkZKS8pXho7GxkcbGxjbFi4iInJMVW8N/oUtogyOGJ1r68sfWBFqxEUMLDzWX8vVjRdgSb/TM+4M1n9tDOhw+CgsLGT16NA0NDXTr1o38/HwyMjLYunUr4eHhdO/evc3z4+PjqaqqOufr5eXlsXDhwg4XLiIiQciqreH/3SX0g5IDzA3P5HPM5mCT7EdYEPo5vXd/5tkuoVZ9bg/p8FhNamoqW7du5aOPPuKee+7hjjvuoLi4uNMFzJ07l9ra2tO38vLyTr+WiIgEsPNM+qSmxtwa3uVy+1vXNrQyO/5qvtP3Zj4nkgSjgT/at/PkyU/pXfKZZ7uEWvi5PaXDIx/h4eEMHjwYgBEjRrBp0yZ+97vf8c1vfpOmpiaOHTvWZvSjurqahISEc75eREQEERERHa9cRESCiwVbwxuGwZqiKh5+cRs1x80pAt8Lq+EXZRtwnDzunS6hFnxuT7voPh8ul4vGxkZGjBhBWFgY69atIzc3F4DS0lLKysoYPXr0RRcqIiJBzstbw1fVNjD/xSLeLDZbRgzqFcXS3GwuT+kOZdd6b9Knlz+3N3QofMydO5eJEyeSkpJCfX09K1asYP369axdu5aYmBh++MMfMmvWLGJjY4mOjua+++5j9OjRF7zSRURE5Jy8tDW8y2Xwt01lLH1tO/WNLYTabfzndYP4z+sHn+nZ4c0RBi99bm/qUPg4ePAg3//+9zlw4AAxMTFkZ2ezdu1abrzRnN3729/+FrvdTm5uLo2NjUyYMIE//OEPHilcRESCjBe2ht996DhzVxby8b4jAFya3J2luVmkJVjY+sELn9vbLrrPh7upz4eIiJzTF1d9tLc1fCdXfTS1uHj23d0sf3sXTS0uuoaH8PMJqXx/dH9C7F7cffZcPPS53akj52+FDxER8S/t9btIT+/0pM+t5ceYs7KA7VXmnIlrh/bikamZJPXo6ubCL5KbP7e7eaXJmIiIiCXctDX8iaYWfvPGDp57fy8uA2KjwlkwOYOvXZKI7exVJb7ATZ/bFyh8iIiI/7nIreE37DjEQ/mFVBw9CcDUy/oy/9YMYqPC3VSgh1zk5/YVCh8iIhI0jjibWPJKMau2VALQt3sXHpmayXWpvS2uLLgofIiISMAzDIOXPtvPwpeLOeJswmaDu64awE9vGkpUhE6F3qZvXEREAlrF0RPMW13E+tJDAKTGO1iam8VlKT0srix4KXyIiEhAanUZ/M/GffxqbSknmloJD7EzY9xgfjx2EOGh/jdJM5AofIiISMDZUV3P7JUFbCk7BsDl/XuQNy2bwb27WVuYAAofIiISQBpbWnnynd08tX4Xza0G3SJCmTMxje9ckYLdF5qFCaDwISIiAeKTfUeYvbKA3YecAIxPj2dJTiYJMZEWVyZnU/gQERG/Vt/QzGOvl/K/H34OQFy3CBZNGcbEzATfbBYmCh8iIuK/3iquZt7qIqrqGgD4xsgkHrwlne5dfbxZWJBT+BAREb9zqL6RX768jVcLDgDQr2dXHp2axZjBcRZXJhdC4UNEAoPLFRB7XshXMwyDf26uYMmrJdSebCbEbuNH1wxg5rihdAkPsbo8uUAKHyLi/9rb7TMtDaZO9YndPsU9yg6fYG5+Ae/vOgzAsMRoluVmk9k3xuLKpKMUPkTEv5WUwPLlUFMDyckQFQVOJ2zZAuXlMGOGAoifa2l18d/v7+XxN3fQ0OwiItTOAzcO5UdXDyA0RKNb/kjhQ0T8l8tljnjU1EBGBpxa2RAdbd4vLobVq81tyHUJxi9t21/L7JUFFFXWATB6YE/ypmXRPy7K4srkYih8iIj/KiszL7UkJ58JHqfYbJCUZI6MlJUFxDbkwaShuZXfrdvJs+/uodVlEB0ZyrxJGXx9ZJKWzwYAhQ8R8V/19eYcj6hz/BYcFQWVlebzxG9s3H2YuasK2Hf4BACTsvqw4GsZ9HaoWVigUPgQEf/lcJiTS51O81LL2ZxO87jD4f3apMNqTzSTt6aEv28qByA+OoLFUzK5aViCxZWJuyl8iIj/SkkxV7Vs2dJ2zgeAYUBFBQwfbj5PfNqawgM8/NI2DtU3AnD7qBRmT0wjOjLM4srEExQ+RMR/2e3mctrycnNyaVLSmdUuFRUQFwc5OZps6sOq6xp4+MUi1m6rBmBgryiWTsvmigGxFlcmnqTwISL+LT3dXE57qs9HZaV5qWX4cDN4aJmtT3K5DP6+qZy810qob2wh1G7jnusGMf36wUSGqVlYoFP4EBH/l55uLqdVh1O/sPvQceauKuTjvUcAuCS5O8tys0hLaGfejgQkhQ8RCQx2u5bT+rjmVhfPvruH363bSVOLiy5hIfxsQip3XtWfELuWzwYThQ8REfG4z8qPMXtlAdurzGXPY4f24pGcTJJju1pcmVhB4UNERDzmRFMLv3ljB8+9vxeXAT26hvHw5AxyLu2rZmFBTOFDREQ84t0dh3gwv5CKoycByLk0kfm3ZtCzW4TFlYnVFD5ERMStjjqbWPxqMas+rQSgb/cuLJmayfWpvS2uTHyFwoeIiLiFYRi89Nl+Fr1czGFnEzYb3HlVf352UypRETrdyBn62yAiIhet8thJ5uUX8k7pIQBS4x0szc3ispQeFlcmvkjhQ0REOq3VZfC/G/fxq7WlOJtaCQ+xc+8Ng/nJtYMID1WfFWmfwoeIiHTKjup65qws4NOyYwCM7NeDpblZDO6tjfzkqyl8iIhIhzS2tPKHd3bzh/W7aG416BYRyuyJadx+RQp2NQuTC6DwISIiF2zz50eYvbKQXQePAzA+vTeLczLpE9PF4srEn3ToglxeXh6XX345DoeD3r17k5OTQ2lpaZvnXHfdddhstja3n/zkJ24tWkREvKu+oZmHXyzitqc3suvgceK6hfNf37mMP35/pIKHdFiHRj42bNjA9OnTufzyy2lpaeHBBx/kpptuori4mKioqNPPu/vuu1m0aNHp+127qn2uiIi/WldSzbzVRRyobQDg6yOSeGhSOt27hltcmfirDoWP119/vc39P//5z/Tu3ZvNmzczduzY04937dqVhIQE91QoIiKWqDneyMKXi3n5s/0ApMR2JW9aFmMGx1lcmfi7i1oHVVtbC0BsbGybx59//nni4uLIzMxk7ty5nDhx4pyv0djYSF1dXZubiIhYxzAM/rm5gvGPb+Dlz/Zjt8F/jB3I2pljFTzELTo94dTlcjFz5kzGjBlDZmbm6ce/853v0K9fPxITEykoKGD27NmUlpayatWqdl8nLy+PhQsXdrYMERFxo7LDJ3gwv5D3dtUAkNEnmmW52WQlxVhcmQQSm2EYRmd+8J577mHNmjW89957JCUlnfN5b7/9NuPGjWPXrl0MGjToS8cbGxtpbGw8fb+uro7k5GRqa2uJjo7uTGkiItJBLa0unnt/H795s5SGZhcRoXZmjh/Kj64ZQFiImoXJ+dXV1RETE3NB5+9OjXzce++9vPLKK7z77rtfGTwARo0aBXDO8BEREUFEhHY4FBE/5nJBWRnU14PDASkpYPefE3bx/jrmrCqgoMK8lH7lwFjypmUzIC7qPD8p0jkdCh+GYXDfffeRn5/P+vXrGTBgwHl/ZuvWrQD06dOnUwWKiPi0khLIz4ft26GhASIjIS0Npk6F9HSrq/tKDc2tLF+3k2fe3UOry8ARGcq8Sel8Y2QyNpuahYnndCh8TJ8+nRUrVvDiiy/icDioqqoCICYmhi5durB7925WrFjBLbfcQs+ePSkoKOCBBx5g7NixZGdne+QDiIhYpqQEli+HmhpIToaoKHA6YcsWKC+HGTN8NoB8uOcwc1cVsrfGCcDEzAQWfm0YvaMjLa5MgkGH5nycKwk/99xz3HnnnZSXl/Pd736XoqIinE4nycnJTJ06lXnz5l3w/I2OXDMSEbGMywVLl5pBIyMDvvjvo2FAcTEMHw6zZ/vUJZjak80sXVPC3z4uByA+OoJFUzKZMEztEeTieGzOx/lySnJyMhs2bOjIS4qI+KeyMvNSS3Jy2+AB5v2kJHNkpKwM+ve3pMSzvV5UxcMvFnGw3pzk/51RKcyZmEZ0ZJjFlUmw0d4uIiKdUV9vzvGIOsekzKgoqKw0n2ex6roGFry4jde3mZfKB8ZFkTcti1EDe1pcmQQrhQ8Rkc5wOMzJpU4ntDfE7HSaxx3WbS/vchn845NyHn2thPqGFkLtNn5y7SDuvWEwkWEhltUlovAhItIZKSnmqpZzzfmoqDDnfKSkWFLenkPHmbuqkI/2HgHgkqQYluZmk95Hc+nEegofIiKdYbeby2nLy83JpUlJZ1a7VFRAXBzk5Hh9smlzq4tn393D79btpKnFRZewEH5601DuGjOAELuWz4pvUPgQEems9HRzOe2pPh+VlealluHDzeDh5WW2BRXH+MU/C9heZc4zuWZIHI9OzSI5VjuLi29R+BARuRjp6ZCaammH0xNNLTz+xg7++/29uAzo3jWMh2/NYOplfdUsTHySwoeIyMWy2y1bTvuvnYd4ML+Q8iMnAZhyaSLzb80grpu2rRDfpfAhIuKHjjqbWPJqCSs/rQAgMSaSR6ZmcX1ab4srEzk/hQ8RET9iGAYvFxxg4UvbOOxswmaDO0b352cTUukWoX/SxT/ob6qIiJ/Yf+wk81cXsW77QQCG9O7G0txsRvTrYXFlIh2j8CEi4uNcLoO/fvQ5y9Zsx9nUSniInenXD+ae6wYRHuo7+8aIXCiFDxERH7azup45qwrZ/PlRAEb068HSaVkMibeuc6rIxVL4EBHxQU0tLp5av5sn39lFU6uLqPAQ5kxM4/ZR/bCrWZj4OYUPEREfs/nzo8xdVcCO6uMAjEvrzeKcTBK7d7G4MhH3UPgQEfERxxtb+PXaUv6ycR+GAXHdwlkweRi3ZvdRszAJKAofIiI+4J3tB5m3uojKY2azsNtGJDFvUjrdu4ZbXJmI+yl8iIhY6PDxRha9UsyLW/cDkBzbhbyp2Vw9JM7iykQ8R+FDRMQChmGQv6WSxa8Uc/REM3Yb/PDqATxw41C6huufZgls+hsuIuJl5UdO8GB+If/aWQNAep9oluVmkZ3U3drCRLxE4UNExEtaXQbPvb+X37yxg5PNrYSH2pk5fgh3XzOQsBA1C5PgofAhIuIFJQfqmLOygM8qagEYNSCWpbnZDIiLsrgyEe9T+BAR8aCG5lb+6+1dPL1hNy0uA0dkKA/dks43RiarWZgELYUPEREP+WjPYeauKmRPjROAm4clsHDKMOKjIy2uTMRaCh8iIm5W19DM0jXbWfFRGQC9HREsmjKMmzP7uP/NXC4oK4P6enA4ICUF7Jo/Ir5N4UNExI3Wbqvi4ReLqK5rBODbV6QwZ2IaMV3C3P9mJSWQnw/bt0NDA0RGQloaTJ0K6enufz8RN1H4EBFxg4N1DSx4aRtriqoAGBAXRd60LK4c2NMzb1hSAsuXQ00NJCdDVBQ4nbBlC5SXw4wZCiDisxQ+REQugmEY/N8n5Tzyagl1DS2E2G38x9iBzBg3hMiwEM+8qctljnjU1EBGBpza9yU62rxfXAyrV0Nqqi7BiE9S+BAR6aR9NU7mripk457DAGT1jWFZbjYZidGefeOyMvNSS3LymeBxis0GSUnmyEhZGfTv79laRDpB4UNEpIOaW1386V97eeKtHTS2uIgMs/Ozm1K586r+hHqjWVh9vTnHI+ocPUKioqCy0nyeiA9S+BAR6YDCilpmryyg+EAdANcMieORnCxSenb1XhEOhzm51Ok0L7Wczek0jzsc3qtJpAMUPkRELsDJplZ++9YO/vSvPbgMiOkSxvxbM8gd3hfb2Zc+PC0lxVzVsmVL2zkfAIYBFRUwfLj5PBEfpPAhInIe7++qYe6qQsqOnABg8iWJPHxrBr0cEdYUZLeby2nLy83JpUlJZ1a7VFRAXBzk5GiyqfgshQ8RkXM4dqKJR14t4YXNFQD0iYlkSU4m49LjLa4McxntjBln+nxUVpqXWoYPN4OHltmKD1P4EBE5i2EYvFp4gF++tI2a403YbPD9K/vxswmpOCI90Cyss9LTzeW06nAqfqZDf0Pz8vK4/PLLcTgc9O7dm5ycHEpLS9s8p6GhgenTp9OzZ0+6detGbm4u1dXVbi1aRMRTDtSe5O7/+YR7V2yh5ngTg3t3458/Gc3CKZm+FTxOsdvN5bRZWeafCh7iBzr0t3TDhg1Mnz6dDz/8kDfffJPm5mZuuukmnE7n6ec88MADvPzyy7zwwgts2LCB/fv3M23aNLcXLiLiTi6Xwf9++Dk3Pv4ub5UcJCzExv3jhvDqjKsZ0S/W6vJEAorNMAyjsz986NAhevfuzYYNGxg7diy1tbX06tWLFStWcNtttwGwfft20tPT2bhxI1deeeV5X7Ouro6YmBhqa2uJbm8JmYiIm+06WM+clYV88vlRAC5L6c6y3GyGxmupqsiF6sj5+6LmfNTW1gIQG2v+VrB582aam5sZP3786eekpaWRkpJyzvDR2NhIY2Njm+JFRLyhqcXF0xt2819v76Kp1UXX8BB+MSGV743uT4jdy8tnRYJIp8OHy+Vi5syZjBkzhszMTACqqqoIDw+ne/fubZ4bHx9PVVVVu6+Tl5fHwoULO1uGiEinfFp2lDkrC9hRfRyA61N7sWRqFn27d7G4MpHA1+nwMX36dIqKinjvvfcuqoC5c+cya9as0/fr6upITk6+qNcUETkXZ2MLv36jlD9/sA/DgNiocBZMzuBrlyR6v1mYSJDqVPi49957eeWVV3j33XdJSko6/XhCQgJNTU0cO3aszehHdXU1CQkJ7b5WREQEEREWNeoRkaDyTulB5uUXUXnsJADThvdl3qQMYqPCLa5MJLh0KHwYhsF9991Hfn4+69evZ8CAAW2OjxgxgrCwMNatW0dubi4ApaWllJWVMXr0aPdVLSLSAYePN7L4lWJWb90PQFKPLjw6NYuxQ3tZXJlIcOpQ+Jg+fTorVqzgxRdfxOFwnJ7HERMTQ5cuXYiJieGHP/whs2bNIjY2lujoaO677z5Gjx59QStdRETcyTAMVm+tZNHLxRw90YzdBj8YM4BZNw2la7h6LIpYpUNLbc91PfS5557jzjvvBMwmYz/96U/529/+RmNjIxMmTOAPf/jDOS+7nE1LbUXEHSqOnuCh/CI27DgEQFqCg2W52VyS3N3awkQCVEfO3xfV58MTFD5E5GK0ugz+8sE+fv1GKSeaWgkPtXP/uCH8eOxAwkLU/VPEU7zW50NExJdsr6pj9spCPis/BsAVA2LJm5bFoF7drC1MRNpQ+BARv9fQ3MqT7+ziqfW7aXEZOCJCmXtLOt+6PBm7moWJ+ByFDxHxax/vPcKcVQXsOWTuMXVTRjyLczKJj460uDIROReFDxHxS3UNzSxbs53nPyoDoJcjgsVThnFzZh+LKwsiLheUlUF9PTgckJKiXXXlgih8iIjfebO4mvmri6iqawDg21ckM+fmdGK6+uCW94GqpATy82H7dmhogMhISEuDqVMhPd3q6sTHKXyIiN84WN/AwpeKebXwAAD9e3bl0WlZXDUozuLKgkxJCSxfDjU1kJwMUVHgdMKWLVBeDjNmKIDIV1L4EBGfZxgGL3xSwZJXi6lraCHEbuPHYwdy/7ghRIaFWF1ecHG5zBGPmhrIyIBT/Z+io837xcWwejWkpuoSjJyTwoeI+LR9NU4ezC/kg92HAcjsG82y3GyGJcZYXFmQKiszL7UkJ58JHqfYbJCUZI6MlJVB//6WlCi+T+FDRHxSS6uLP723l9++uYPGFheRYXZ+emMqd43pT6iahVmnvt6c4xEV1f7xqCiorDSfJ3IOCh8i4nOKKmuZvbKAbfvrALh6cByPTs0ipWdXiysTHA5zcqnTaV5qOZvTaR53OLxfm/gNhQ8R8Rknm1p5Yt0O/vSvvbS6DGK6hDFvUjq3jUg6595S4mUpKeaqli1b2s75ADAMqKiA4cPN54mcg8KHiPiED3bVMDe/kM8PnwDg1uw+LJg8jF6OCIsrkzbsdnM5bXm5Obk0KenMapeKCoiLg5wcTTaVr6TwISKWqj3RzCOvFfN/n1QAkBAdyeKcTG7MiLe4Mjmn9HRzOe2pPh+VlealluHDzeChZbZyHgofImIJwzB4rbCKBS9to+Z4IwDfH92Pn09IxRGpZmE+Lz3dXE6rDqfSCQofIuJ1VbUNzH+xiDeLqwEY1CuKZbnZjOwfa3Fl0iF2u5bTSqcofIiI17hcBis+LmPZmu3UN7YQFmLjnusGM/36QUSEqlmYSLBQ+BARr9h18DhzVxWwad9RAC5N7s6y3GxSE7QkUyTYKHyIiEc1tbh4ZsNufv/2LppaXXQND+EXE1L53uj+hNi1fFYkGCl8iIjHbC0/xpyVBWyvMrtdXpfaiyU5mST1ULMwkWCm8CEibudsbOE3b+zguQ/2YhgQGxXOgskZfO2SRDULExGFDxFxr/WlB3kov4jKYycBmHZZX+bdmkFsVLjFlX0Fl0tLRkW8SOFDRNziiLOJxa8Uk7+lEoC+3bvw6LQsrh3ay+LKzqOk5EyzrIYGs1lWWprZxVPNskQ8QuFDRC6KYRi8uHU/i14p5oizCZsN7ryqPz+7KZWoCB//J6akBJYvh5oac4v4U23Ct2wx24fPmKEAIuIBPv4vg4j4soqjJ3gov4gNOw4BkJbgIG9aFpel9LC4sgvgcpkjHjU1bTdIi4427xcXw+rVZhdPXYIRcSuFDxHpsFaXwf9s3Mev1pZyoqmV8BA7M8YN5sdjBxEe6icn6rIy81JLcnLbnVnBvJ+UZI6MlJWpi6eImyl8iEiHlFbVM3tlAVvLjwFwRf9YHp2WxeDe3awtrKPq6805HlFR7R+PijI3TKuv925dIkFA4UNELkhjSytPvr2LP6zfTYvLwBERypxb0vj25SnY/bFZmMNhTi51Os1LLWdzOs3jDnVgFXE3hQ8ROa9N+44wZ2UBuw85AbgxI57FUzJJiIm0uLKLkJJirmrZsqXtnA8Aw4CKCnOL+JQU62oUCVAKHyJyTvUNzSx7fTt//bAMgLhuESyaMoyJmQn+3yzMbjeX05aXm5NLk5LOrHapqIC4OMjJ0WRTEQ9Q+BBpj5pO8WZxNfNXF1FV1wDAN0cm8+At6cR0DbO4MjdKTzeX057q81FZaV5qGT7cDB5aZiviEQofImcL8qZTh+ob+eXL23i14AAA/Xp2JW9qFlcNjrO4Mg9JTzeX0wZ52BTxJoUPkS8K4qZThmHwwuYKHnm1hNqTzYTYbdx9zUBmjh9CZFiI1eV5lt2u5bQiXqTwIXJKEDed+vywk7mrCvlg92EAhiVGsyw3m8y+MRZXJiKBSOFD5JQgbDrV0uri/723l9++tYOGZheRYXZm3TiUH4wZQGhIYAUsEfEdCh8ipwRZ06miylrmrCqgqLIOgKsG9SRvWhb9ep7j84uIuEmHf7V59913mTx5MomJidhsNlavXt3m+J133onNZmtzu/nmm91Vr4jnfLHpVHsCpOlUQ3MrS9dsZ8qT71NUWUd0ZCiP3ZbN8z8apeAhIl7R4ZEPp9PJJZdcwg9+8AOmTZvW7nNuvvlmnnvuudP3IyIiOl+hiLcEQdOpD3bXMHdVIZ8fPgHApOw+LJicQW+HHzcLExG/0+HwMXHiRCZOnPiVz4mIiCAhIaHTRYlYIoCbTtWeaObR10r4xyflACRER7I4J5MbM+LbPlH9TUTECzwy52P9+vX07t2bHj16cMMNN7BkyRJ69uzZ7nMbGxtpbGw8fb+urs4TJYlcmABrOmUYBq8XVfHwS9s4VG/+f/bdK1P4xc1pREee1SwsyPubiIj3uD183HzzzUybNo0BAwawe/duHnzwQSZOnMjGjRsJCflyr4C8vDwWLlzo7jJEOi9Amk5V1Tbw8ItFvFFcDcDAXlEsy83m8v6xX35yEPc3ERHvsxmGYXT6h2028vPzycnJOedz9uzZw6BBg3jrrbcYN27cl463N/KRnJxMbW0t0e3tNCkiX8nlMvjbpjKWvrad+sYWQu02/vO6Qfzn9YPbbxbmcsHSpeee61JcbI78zJ7tdwFMRLynrq6OmJiYCzp/e3yp7cCBA4mLi2PXrl3tho+IiAhNSBVxk92HjjN3ZSEf7zsCwKXJ3Vmam0Vawlf8QxCE/U1ExFoeDx8VFRUcPnyYPn36ePqtRIJWU4uLZ9/dzfK3d9HU4qJreAg/uymVO67qT4j9PLvPBll/ExGxXofDx/Hjx9m1a9fp+3v37mXr1q3ExsYSGxvLwoULyc3NJSEhgd27d/OLX/yCwYMHM2HCBLcWLiKmreXHmLOygO1VZjgYO7QXj+Rkkhzb9cJe4Iv9TdobKg2Q/iYi4js6HD4++eQTrr/++tP3Z82aBcAdd9zBU089RUFBAX/5y184duwYiYmJ3HTTTSxevFiXVkTc7ERTC795YwfPvb8XlwE9uoaxYPIwplxqNgC8YEHQ30REfEuHw8d1113HV81RXbt27UUVJCLnt2HHIR7KL6Ti6EkApl7Wl3mT0unZrRMhP4D7m4iIb9LeLvLV1HTKpxxxNrHklWJWbakEoG/3LjwyNZPrUntf3AsHWH8TEfFtCh9ybmo65TMMw+Clz/az8OVijjibsNngrqsG8NObhhIV4ab/jQOkv4mI+D6FD2mfmk75jIqjJ5i3uoj1pYcASI13sDQ3i8tSerj/zex2LacVEY9T+JAvc7nMEY+amrYTEKOjzfvFxbB6tflbsn4r9phWl8H/bNzHr9aWcqKplfAQO/fdMJj/uHYQ4aH63kXEfyl8yJep6ZTldlTXM3tlAVvKjgFwef8e5E3LZnDvbtYWJiLiBgof8mVqOmWZxpZWnnxnN0+t30Vzq0G3iFDmTEzjO1ekYD9fszARET+h8CFfpqZTlvhk3xFmryxg9yEnAOPT41mcM4w+MV0srkxExL0UPuTL1HTKq+obmnns9VL+98PPAYjrFsGiKcOYmJnQsWZhIiJ+QuFDvkxNp7xmXUk181YXcaC2AYBvjEziwVvS6d413OLKREQ8R+FD2qemUx51qL6RhS9v45WCAwCkxHYlb1oWYwbHWVyZiIjnKXzIuanplNsZhsE/N1ew5NUSak82E2K38aNrBjBz3FC6hIdYXZ6IiFcofMhXU9Mptyk7fIK5+QW8v+swAMMSo1mWm01m3xiLKxMR8S6FDxEPa2l18dz7+/jNm6U0NLuICLXzwI1D+dHVAwgN0SiSiAQfhQ8RD9q2v5Y5KwsprKwFYPTAnuRNy6J/3Dl6qIiIBAGFDxEPaGhu5XfrdvLsu3todRlER4Yyb1IGXx+ZpOWzIhL0FD5E3Gzj7sPMXVXAvsMnAJiU1YcFX8ugtyPywl7A5dIkXxEJaAofIm5Se7KZvNdK+PumcgDioyNYPCWTm4YlXPiLlJScWd7c0GAub05LM/uuaHlzYFLYlCCk8CHiBq8XHWD+i9s4VN8IwO2jUpg9MY3oyLALf5GSEli+3NxNODn5TGO3LVvMhm8zZiiABBqFTQlSCh8iF6G6roGHXyxi7bZqAAb2imLptGyuGBDbsRdyucyTUE1N25b20dHm/eJiWL3a7Lui34oDg8KmBDGFD5FOcLkM/r6pnLzXSqhvbCHUbuOe6wYx/frBRIZ1ollYWZn5229yctu9dMC8n5RknqzKytR3JRAobEqQU/gQ6aA9h44zd1UhH+09AsAlyd1ZlptFWkI7OwBfqPp6c9g96hxLcKOizBb39fWdfw/xHQqbEuQUPkQuUHOri2ff3cPv1u2kqcVFl7AQfjYhlTuv6k+I/SKXzzoc5vV+p9P87fdsTqd53OG4uPcR36CwKUFO4UPkAnxWfozZKwvYXmWeDMYO7cUjOZkkx3Z1zxukpJgTDbdsaTsMD2AY5m7Cw4ebzxP/p7ApQU7hQ+QrnGhq4fE3dvDf7+/FZUCPrmE8PDmDnEv7urdZmN1urnAoLzev9yclnZmAWFEBcXHmbsK6/h8YFDYlyCl8iJzDv3YeYu6qQiqOngQg59JE5t+aQc9uEZ55w/R0c4XDqaWXlZXmb7/Dh5vBQysfAofCpgQ5m2EYhtVFfFFdXR0xMTHU1tYS3d5wpIiHHXU2sfjVYlZ9WglA3+5dWDI1k+tTe3unADWdCh7t9flIT1fYFL/UkfO3Rj5E/s0wDF76bD+LXi7msLMJmw3uGN2fn09IJSrCi/+r2O1a4RAs0tPN5bQKmxJkFD5EgMpjJ5m/uoi3tx8EIDXewdLcLC5L6WFxZRLwFDYlCCl8SFBrdRn89cPPeez17TibWgkPsXPvDYP5ybWDCA/Vb58dpktGInIBFD4kaO2ormfOygI+LTsGwMh+PViam8Xg3lre2Cnap0RELpDChwSdxpZW/vDObv6wfhfNrQbdIkKZPTGN269IwX6xzcKClfYpEZEOUPiQoLL58yPMWVnIzoPHARif3pvFOZn0ielicWVuYsVlD+1TIiIdpPAhQeF4YwuPvb6d//3wcwwD4rqF88uvDWNSVh/3NguzklWXPbRPiYh0kMKHBLy3t1fzUH4RB2obAPj6iCQempRO967hFlfmRlZe9tA+JSLSQR0eA3333XeZPHkyiYmJ2Gw2Vq9e3ea4YRg8/PDD9OnThy5dujB+/Hh27tzprnpFLljN8Ubu+9sWfvDnTzhQ20BKbFf++sNR/OrrlwRW8Dj7skd0NISEnLnsUVNjXvZwuTzz/l/cp6Q92qdERM7S4fDhdDq55JJLePLJJ9s9/thjj7F8+XKefvppPvroI6KiopgwYQINDQ0XXazIhTAMg39urmD84xt4+bP92G3wH2MHsnbmWK4eEmd1ee7XkcsennBqn5LycnNfki86tU9Jerr2KRGR0zp82WXixIlMnDix3WOGYfDEE08wb948pkyZAsD//M//EB8fz+rVq/nWt751cdWKnEf5kRM8mF/Iv3bWAJDeJ5rHcrPJSoqxuDIPsvqyh/YpEZEOcuucj71791JVVcX48eNPPxYTE8OoUaPYuHFju+GjsbGRxsbG0/fr6urcWZJYyYsrL1paXfz5g3385o0dnGxuJSLUzszxQ/nRNQMICwnwk54vbM/ujk3x1KBMJGi4NXxUVVUBEB8f3+bx+Pj408fOlpeXx8KFC91ZhvgCL668KN5fx5xVBRRU1AJw5cBY8qZlMyDuHCMBgcZXtme/mH1K1KBMJKhYvtpl7ty5zJo16/T9uro6kpOTLaxILpqXVl40NLeyfN1Onnl3D60uA0dkKPMmpfONkcmBs3z2QvjSZY/O7FOiBmUiQcet4SMhIQGA6upq+vTpc/rx6upqLr300nZ/JiIigoiICHeWIVbyUsOpD/ccZu6qQvbWmCssJmYmsPBrw+gdHemGD+GH3HHZwwpqUCYSlNwaPgYMGEBCQgLr1q07HTbq6ur46KOPuOeee9z5VuKrPNxwqvZkM0vXbOdvH5srN3o7Ilg0JZObMxPcULyf88ft2dWgTCQodTh8HD9+nF27dp2+v3fvXrZu3UpsbCwpKSnMnDmTJUuWMGTIEAYMGMD8+fNJTEwkJyfHnXWLr/LgyovXi6p4+MUiDtabE5S/MyqF2TenEdMl7GIqDiz+tj271St1RMQSHQ4fn3zyCddff/3p+6fma9xxxx38+c9/5he/+AVOp5Mf//jHHDt2jKuvvprXX3+dyMggHQ4PNh5YeVFd18CCF7fx+jZz0vLAuCjypmUxamDPc/+QVk74B19YqSMiXtfh8HHddddhnN1I6AtsNhuLFi1i0aJFF1WY+Ck3rrwwDIO/byrn0ddKqG9oIdRu4yfXDuLeGwYTGRZy7h/Uygn/4SsrdUTEqyxf7SIBxk0rL/YcOs7cVYV8tPcIANlJMSydlk1GYju/HX+RVk74F19aqSMiXmMzvmoYwwJ1dXXExMRQW1tLdHvDsOIf2ht9SE8/78qL5lYXz767h9+t20lTi4suYSH89Kah3DVmACH28yyfdblg6dJz/xZdXGz+Fj17tk5mvqaTf19ExHd05PytkQ/xjE6svCioOMbslYWUHDC73F4zJI5Hp2aRHNv1wt5TKyf8lz+u1BGRTlP48Af+OnnyAldenGhq4bdv7uD/vbcXlwHdu4bx8K0ZTL2sb8eahWnlhH/zt5U6ItJpCh++LsAnT/5r5yEezC+k/MhJAKZcmsj8WzOI69aJxnNaOSEi4hcUPnxZAE+ePOpsYsmrJaz8tAKAxJhIHpmaxfVpvTv/or6ycsJfR6pERLxE4cNXBWjbacMweLngAIte3kbN8SZsNrhjdH9+NiGVbhEX+dfRF1ZOBPhIlYiIOyh8+KoAnDy5/9hJ5q8uYt32gwAM6d2NpbnZjOjXw31vYuUeJwE8UiUi4k4KH74qgCZPulwGf/3oc5at2Y6zqZWwEBv3Xj+Ee64bRHioB0YhrFg5EaAjVSIinqDw4asCZPLkzup65qwqZPPnRwEY0a8HS6dlMSTew3V7e+VEAI5UiYh4isKHr/KVyZOd1NjSylPrd/PkO7tobjWICg9hzsQ0bh/VD/v5moX5owAaqRIR8TSFD1/lC5MnO2nz50eZs7KAnQePA3BDWm+W5GSS2L2LxZV5UICMVImIeIPChy+zcvJkJxxvbOHXa0v5y8Z9GAb0jArnl18bxq3ZfTrWLMwf+flIlYiINyl8+Do/aTv99vZq5uUXsb+2AYDbRiTx0C3p9IgKt7gyL/HjkSoREW9T+PAHPtx2uuZ4I4teLualz/YDkBzbhUenZnHNkF4WV2YBPxupEhGxisKHdIphGKz6tJLFrxZz7EQzdhv86JqBzBw/hK7hQfzXyk9GqkRErBTEZwnprPIjJ3gwv5B/7awBIL1PNMtys8hO6m5tYb7Ch0eqRER8gcKHXLBWl8Fz7+/lN2/s4GRzK+GhdmaOH8Ld1wwkLES/2YuIyIVR+JALUnKgjjkrC/isohaAUQNiyZuWxcBe3SyuTERE/I3Ch3ylhuZWfv/2Tp7ZsIcWl4EjMpSHbknnGyOTA7NZmIiIeJzCh5zTh3sO8+CqQvbUOAG4eVgCC6cMIz460uLKRETEnyl8yJfUNTST99p2/vZxGQC9HREsmjKMmzP7WFyZiIgEAoUPaWPttirmry7iYH0jAN++IoU5E9OI6RJmcWUiIhIoFD4EgIN1DSx4aRtriqoAGBAXRd60LK4c2NPiykREJNAofAQ5wzD4x6ZyHnmthPqGFkLtNv7j2oHcd8MQIsNCrC5PREQCkMKHN7hcPtnxcm+Nk7mrCvhwzxEAspNiWDotm4zEdnZlFRERcROFD08rKTmz10dDg7nXR1qauQmZRXt9NLe6+OO/9vC7t3bS2OIiMszOz25K5c6r+hOqZmEiIuJhCh+eVFICy5dDTQ0kJ5/Z5XTLFnP30xkzPB9Azhp1KQyJYfaqIooP1AFwzZA4HsnJIqVnV8/WISIi8m8KH57icpkjHjU1kJEBtn835IqONu8XF8Pq1eYmZJ66BPOFUZeTjc38ttdI/tQtFRc2uncNY/6kDKYN74vNpmZhIiLiPQofnlJWZl5qSU4+EzxOsdkgKckMB2VlntmE7AujLu+lZPNgWAZlmM3BvtZUycPfuIq44Unuf18REZHzUPjwlPp6c45HVFT7x6OioLLSfJ67/XvU5diROpYMmcQ/Xb0ASKSRJaH7uGH3Rlh7GC7N8ImJryIiElx05vEUh8OcXOp0tn/c6TSPOxxuf2vj8895eZ+T8f1v45+uXtgw+H5INW9EFHFDaF3bURcREREvU/jwlJQUc1VLeTkYRttjhgEVFeZk05QUt77tgdqT3P3KXu6LvYoaWziDbSf5Z/h2FoWV0c3mMp8UFWWOynhi1EVEROQ8dNnFU+x2czltebk5uTQp6cxql4oKiIuDnBy3XfZwuQye/+hzlr1eyvHGFsKMVqa3fs49UUeIsJ0Vfjw46iIiInI+Ch+elJ5uLqc91eejstI86Q8fbgYPNy2z3XWwntkrC9n8+VEAhqd0Z+nhDxla8KG5soYvTHg9NeoyfLjbR11EREQuhNvDxy9/+UsWLlzY5rHU1FS2b9/u7rfyD+np5nJaD3Q4bWpx8dT63Tz5zi6aWl1EhYcwe2Ia3x3VD3tpLOzf5ZVRFxERkY7wyMjHsGHDeOutt868SWiQD7DY7W5fTvtp2VHmrCxgR/VxAK5P7cWSqVn07d7FfIKXRl1EREQ6yiOpIDQ0lISEBE+8dNA73tjCr9eW8peN+zAM6BkVzoKvDWNydp8vNwvz4KiLiIhIZ3kkfOzcuZPExEQiIyMZPXo0eXl5pJxjfkFjYyONjY2n79fV1XmipIDwTulB5uUXUXnsJAC5w5OYNymdHlHh5/4hD4y6iIiIXAybYZy9DvTirFmzhuPHj5OamsqBAwdYuHAhlZWVFBUV4WhndUV7c0QAamtriY7W7qoAh483suiVYl7cuh+ApB5dyJuWxTVDellcmYiIiKmuro6YmJgLOn+7PXyc7dixY/Tr14/HH3+cH/7wh1863t7IR3JyssIHYBgG+VsqWfxKMUdPNGO3wQ/GDGDWTUPpGh7k82hERMSndCR8ePwM1r17d4YOHcquXbvaPR4REUFERISny/A75UdO8GB+If/aWQNAWoKDZbnZXJLc3drCRERELpLHw8fx48fZvXs33/ve9zz9VgGh1WXw5w/28eu1pZxsbiU81M7944bw47EDCQvRRFEREfF/bg8fP/vZz5g8eTL9+vVj//79LFiwgJCQEL797W+7+60CTsmBOuasLOCziloArhgQy9JpWQzs1c3iykRERNzH7eGjoqKCb3/72xw+fJhevXpx9dVX8+GHH9KrlyZHnktDcyv/9fYunt6wmxaXgSMilLm3pPOty5Ox223nfwERERE/4vbw8fe//93dLxnQPtpzmLmrCtlTY+5+O2FYPIumZBIfHWlxZSIiIp4RPEsmXC6farZV19DM0jXbWfGRua19L0cEi6cM4+bMPpbVJCIi4g3BET5KSs60GW9oMNuMp6WZu85a0GZ87bYqHn6xiOo6c4nxt69IZs7EdGK6hHm9FhEREW8L/PBRUgLLl0NNDSQnn9lgbcsWc7v7GTO8FkAO1jfwy5e28VphFQAD4qJ4dGoWowf19Mr7i4iI+ILADh8ulzniUVNjbi1/au+T6GjzfnExrF5t7n/iwUswhmHwf5+U88irJdQ1tBBit/EfYwcyY9wQIsNCPPa+IiIiviiww0dZmXmpJTn5TPA4xWYzt5ovKTGf91X7n1zEfJF9NU7mripk457DAGT1jWFpbhbDEmM6+aFERET8W2CHj/p6c45HVFT7x6OizK3m6+vP/RqdnC/S0urij//ayxNv7aCxxUVkmJ2f3pjKXWP6E6pmYSIiEsQCO3w4HGZYcDrNSy1nczrN4+1seAd0er5IUWUts1cWsG2/uUPv1YPjeHRqFik9u7rz04mIiPilwA4fKSnmKMWWLW3nfAAYBlRUwPDh5vPO1on5IiebWnnirR386b29tLoMYrqEMf/WDHKH98V29mUfERGRIBXY4cNuNy+PlJebYSEp6czoRUUFxMVBTk778zc6OF/k/V01zF1VSNmREwBMviSRh2/NoJdDm+aJiIh8UWCHDzAvi8yYcWbeRmWleall+HAzeJxr3sYFzhc5VnOMRzZ9xgubKwDoExPJkpxMxqXHe+bziIiI+LnADx9gBozU1I6tWDnPfBHD6eS17oNZ8Go1NSdbsNnge1f24+cTUnFEqlmYiIjIuQRH+AAzaHzVctqzfcV8kQOuUOa3DOWt2BQ42cLg3t1YOi2Lkf1j3V+3iIhIgAme8NFR7cwXcXWN4vmG7iwLGcTxqHDC7PCf1w/hP68fRESomoWJiIhcCIWPr/KF+SK7dlUy15XFpi7mXI7LekWw7LujGBp/jmW6cvF8bDNAERFxD4WP82gaksozV9zG74/vosll0DXUzi9uTuV7Vw0gxK7lsx7jY5sBioiI+yh8fIUtZUeZs7KQ0mqzA+p1qb1YkpNJUg81C/MoH9oMUERE3E/hox3OxhZ+/UYpf/5gH4YBsVHhLJicwdcuSVSzME/zkc0ARUTEcxQ+zrK+9CAP5RdReewkANOG92XepAxio8ItrixIuGszQBER8VkKH/92+Hgji18pZvXW/QD07d6FR6dlce3QXhZXFmTcsRmgiIj4tKAPH4ZhsHprJYteLuboiWbsNrhrzABm3TiUqIig/3q872I3AxQREZ8X1GfXiqMneCi/iA07DgGQluBgaW42lyZ3t7awYHYxmwGKiIhfCMrw0eoy+MsH+/j1G6WcaGolPNTO/eOG8OOxAwkL0SRGS13MZoAiIuIXgi58bK+qY/bKQj4rPwbAFf1jycvNYlCvbtYWJmd0djNAERHxC0ETPhqaW3nynV08tX43LS4DR0Qoc25J49uXp2BXszDf05nNAEVExC8ETfj4184afv/2LgBuzIhn8ZRMEmIiLa5KvlJHNwMUERG/EDThY3x6b759RTJjh/Ti5swENQsTERGxSNCED5vNRt60bKvLEBERCXq6gC4iIiJepfAhIiIiXqXwISIiIl6l8CEiIiJepfAhIiIiXqXwISIiIl6l8CEiIiJe5bHw8eSTT9K/f38iIyMZNWoUH3/8safeSkRERPyIR8LHP/7xD2bNmsWCBQv49NNPueSSS5gwYQIHDx70xNuJiIiIH/FI+Hj88ce5++67ueuuu8jIyODpp5+ma9eu/Pd//7cn3k5ERET8iNvDR1NTE5s3b2b8+PFn3sRuZ/z48WzcuPFLz29sbKSurq7NTURERAKX28NHTU0Nra2txMfHt3k8Pj6eqqqqLz0/Ly+PmJiY07fk5GR3lyQiIiI+xPLVLnPnzqW2tvb0rby83OqSRERExIPcvqttXFwcISEhVFdXt3m8urqahISELz0/IiKCiIiI0/cNwwDQ5RcRERE/cuq8feo8/lXcHj7Cw8MZMWIE69atIycnBwCXy8W6deu49957z/vz9fX1ALr8IiIi4ofq6+uJiYn5yue4PXwAzJo1izvuuIORI0dyxRVX8MQTT+B0OrnrrrvO+7OJiYmUl5fjcDiw2Wxurauuro7k5GTKy8uJjo5262vLGfqevUPfs3foe/Yefdfe4anv2TAM6uvrSUxMPO9zPRI+vvnNb3Lo0CEefvhhqqqquPTSS3n99de/NAm1PXa7naSkJE+UdVp0dLT+YnuBvmfv0PfsHfqevUfftXd44ns+34jHKR4JHwD33nvvBV1mERERkeBi+WoXERERCS5BFT4iIiJYsGBBm9U14n76nr1D37N36Hv2Hn3X3uEL37PNuJA1MSIiIiJuElQjHyIiImI9hQ8RERHxKoUPERER8SqFDxEREfGqoAkfTz75JP379ycyMpJRo0bx8ccfW11SwMnLy+Pyyy/H4XDQu3dvcnJyKC0ttbqsgLd06VJsNhszZ860upSAU1lZyXe/+1169uxJly5dyMrK4pNPPrG6rIDS2trK/PnzGTBgAF26dGHQoEEsXrz4gvYHka/27rvvMnnyZBITE7HZbKxevbrNccMwePjhh+nTpw9dunRh/Pjx7Ny50yu1BUX4+Mc//sGsWbNYsGABn376KZdccgkTJkzg4MGDVpcWUDZs2MD06dP58MMPefPNN2lubuamm27C6XRaXVrA2rRpE8888wzZ2dlWlxJwjh49ypgxYwgLC2PNmjUUFxfzm9/8hh49elhdWkBZtmwZTz31FP/1X/9FSUkJy5Yt47HHHuP3v/+91aX5PafTySWXXMKTTz7Z7vHHHnuM5cuX8/TTT/PRRx8RFRXFhAkTaGho8HxxRhC44oorjOnTp5++39raaiQmJhp5eXkWVhX4Dh48aADGhg0brC4lINXX1xtDhgwx3nzzTePaa6817r//fqtLCiizZ882rr76aqvLCHiTJk0yfvCDH7R5bNq0acbtt99uUUWBCTDy8/NP33e5XEZCQoLxq1/96vRjx44dMyIiIoy//e1vHq8n4Ec+mpqa2Lx5M+PHjz/9mN1uZ/z48WzcuNHCygJfbW0tALGxsRZXEpimT5/OpEmT2vzdFvd56aWXGDlyJF//+tfp3bs3l112GX/84x+tLivgXHXVVaxbt44dO3YA8Nlnn/Hee+8xceJEiysLbHv37qWqqqrNvx8xMTGMGjXKK+dGj+3t4itqampobW390qZ28fHxbN++3aKqAp/L5WLmzJmMGTOGzMxMq8sJOH//+9/59NNP2bRpk9WlBKw9e/bw1FNPMWvWLB588EE2bdrEjBkzCA8P54477rC6vIAxZ84c6urqSEtLIyQkhNbWVh555BFuv/12q0sLaFVVVQDtnhtPHfOkgA8fYo3p06dTVFTEe++9Z3UpAae8vJz777+fN998k8jISKvLCVgul4uRI0fy6KOPAnDZZZdRVFTE008/rfDhRv/3f//H888/z4oVKxg2bBhbt25l5syZJCYm6nsOYAF/2SUuLo6QkBCqq6vbPF5dXU1CQoJFVQW2e++9l1deeYV33nmHpKQkq8sJOJs3b+bgwYMMHz6c0NBQQkND2bBhA8uXLyc0NJTW1larSwwIffr0ISMjo81j6enplJWVWVRRYPr5z3/OnDlz+Na3vkVWVhbf+973eOCBB8jLy7O6tIB26vxn1bkx4MNHeHg4I0aMYN26dacfc7lcrFu3jtGjR1tYWeAxDIN7772X/Px83n77bQYMGGB1SQFp3LhxFBYWsnXr1tO3kSNHcvvtt7N161ZCQkKsLjEgjBkz5ktLxXfs2EG/fv0sqigwnThxAru97akoJCQEl8tlUUXBYcCAASQkJLQ5N9bV1fHRRx955dwYFJddZs2axR133MHIkSO54ooreOKJJ3A6ndx1111WlxZQpk+fzooVK3jxxRdxOBynrxvGxMTQpUsXi6sLHA6H40vzaKKioujZs6fm17jRAw88wFVXXcWjjz7KN77xDT7++GOeffZZnn32WatLCyiTJ0/mkUceISUlhWHDhrFlyxYef/xxfvCDH1hdmt87fvw4u3btOn1/7969bN26ldjYWFJSUpg5cyZLlixhyJAhDBgwgPnz55OYmEhOTo7ni/P4ehof8fvf/95ISUkxwsPDjSuuuML48MMPrS4p4ADt3p577jmrSwt4WmrrGS+//LKRmZlpREREGGlpacazzz5rdUkBp66uzrj//vuNlJQUIzIy0hg4cKDx0EMPGY2NjVaX5vfeeeeddv9NvuOOOwzDMJfbzp8/34iPjzciIiKMcePGGaWlpV6pzWYYaiMnIiIi3hPwcz5ERETEtyh8iIiIiFcpfIiIiIhXKXyIiIiIVyl8iIiIiFcpfIiIiIhXKXyIiIiIVyl8iIiIiFcpfIiIiIhXKXyIiIiIVyl8iIiIiFcpfIiIiIhX/X9LRtgxdMP2HgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Fit a linear model\n",
    "params = np.polyfit(x, y, deg=1)\n",
    "model = np.poly1d(params)\n",
    "\n",
    "y_pred_linear = model(x)\n",
    "plt.plot(x, y, 'ro', alpha=0.5)\n",
    "plt.plot(x, y_pred_linear)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here is a model that is overfitting:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Fit a polynomial with degree 30!\n",
    "params_30 = np.polyfit(x, y, deg=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x216b77087d0>]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGgCAYAAAAKKQXsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOH0lEQVR4nO3deXhU5fnG8e9MlsnCJBACWUjCDknYA4KIdaUiWhTBWhXr+rNVgwi0ammr1q1YWzdaQe1itYoLrWDVuiAqbqAsQcCEsJMFEkiAzGQg65zfHwcCgQBJyKy5P9c11zhzTibPpGnm5j3v+7wWwzAMRERERLzE6usCREREpH1R+BARERGvUvgQERERr1L4EBEREa9S+BARERGvUvgQERERr1L4EBEREa9S+BARERGvUvgQERERr1L4EBEREa86rfDx2GOPYbFYmD59esNzVVVVZGdn07lzZzp06MDkyZMpLS093TpFREQkSIS29gtXrFjB888/z+DBgxs9P2PGDN577z0WLFhAbGwsU6dOZdKkSXz11VfNel23283OnTux2+1YLJbWliciIiJeZBgGTqeT5ORkrNZTjG0YreB0Oo2+ffsaixcvNs4991zjrrvuMgzDMPbv32+EhYUZCxYsaDg3Ly/PAIxly5Y167ULCwsNQDfddNNNN910C8BbYWHhKT/rWzXykZ2dzaWXXsrYsWN55JFHGp5ftWoVtbW1jB07tuG59PR00tLSWLZsGWeeeeZxr1VdXU11dXXDY+PQJruFhYXExMS0pjwRERHxMofDQWpqKna7/ZTntjh8vP7666xevZoVK1Ycd6ykpITw8HA6duzY6PmEhARKSkqafL3Zs2fz4IMPHvd8TEyMwoeIiEiAac6UiRZNOC0sLOSuu+7i1VdfJSIiotWFHW3WrFlUVFQ03AoLC9vkdUVERMQ/tSh8rFq1it27d5OVlUVoaCihoaEsXbqUOXPmEBoaSkJCAjU1Nezfv7/R15WWlpKYmNjka9pstoZRDo12iIiIBL8WXXa58MILWbduXaPnbrrpJtLT07n33ntJTU0lLCyMJUuWMHnyZADy8/MpKChg9OjRbVe1iIiIBKwWhQ+73c7AgQMbPRcdHU3nzp0bnr/llluYOXMmcXFxxMTEcOeddzJ69OgmJ5uKiIhI+9PqPh8n8tRTT2G1Wpk8eTLV1dWMGzeOuXPntvW3ERERkQBlMQ6vbfUTDoeD2NhYKioqNP9DREQkQLTk81t7u4iIiIhXKXyIiIiIV7X5nA8RERG/53ZDQQE4nWC3Q1oanGo/EmkzCh8iItK+5OXBwoWwYQNUVUFEBKSnwxVXQEaGr6trFxQ+RESk/cjLgzlzoKwMUlMhOhpcLsjJgcJCmDZNAcQLNMYkIiLtg9ttjniUlUFmJsTEQEiIeZ+ZaT6/aJF5nniUwoeIiLQPBQXmpZbUVDh28zOLBVJSzJGRggLf1NeOKHyIiEj74HSaczyio5s+Hh1tHnc6vVtXO6TwISIi7YPdbk4udbmaPu5ymcftdu/W1Q4pfIiISPuQlmauaikshGObexsGFBWZk03T0nxTXzui8CEiIu2D1Woup42Ph9xcqKiAujrzPjfXfH7iRPX78AL9hEVEpP3IyDCX0w4bBuXlsHGjeZ+VpWW2XqQ+HyIi0r5kZED//upw6kMKHyIi0v5YrdCjh6+raLcU80RERMSrFD5ERETEqxQ+RERExKsUPkRERMSrFD5ERETEqxQ+RERExKsUPkRERMSrFD5ERETEqxQ+RERExKsUPkRERMSrFD5ERETEqxQ+RERExKsUPkRERMSrFD5ERETEqxQ+RERExKsUPkRERMSrFD5ERETEqxQ+RERExKsUPkRERMSrFD5ERETEqxQ+RERExKtaFD7mzZvH4MGDiYmJISYmhtGjR/P+++83HD/vvPOwWCyNbrfddlubFy0iIiKBK7QlJ6ekpPDYY4/Rt29fDMPgpZde4vLLLycnJ4cBAwYAcOutt/LQQw81fE1UVFTbViwiIiIBrUXhY8KECY0eP/roo8ybN4/ly5c3hI+oqCgSExPbrkIREREJKq2e81FfX8/rr7+Oy+Vi9OjRDc+/+uqrxMfHM3DgQGbNmsWBAwdO+jrV1dU4HI5GNxERaQfcbti+HdatM+/dbl9XJF7SopEPgHXr1jF69Giqqqro0KEDCxcuJDMzE4Brr72W7t27k5yczNq1a7n33nvJz8/nrbfeOuHrzZ49mwcffLD170BERAJPXh4sXAgbNkBVFUREQHo6XHEFZGT4ujrxMIthGEZLvqCmpoaCggIqKir497//zd/+9jeWLl3aEECO9sknn3DhhReyefNmevfu3eTrVVdXU11d3fDY4XCQmppKRUUFMTExLXw7IiLi9/LyYM4cKCuD1FSIjgaXCwoLIT4epk1TAAlADoeD2NjYZn1+t3jkIzw8nD59+gAwfPhwVqxYwTPPPMPzzz9/3LmjRo0COGn4sNls2Gy2lpYhIiKByO02RzzKyiAzEywW8/mYGPNxbi4sWgT9+4PVP7pB1LsNCvceYPPuSjbvqTTvd1fSwRbKn68ZRqfocF+XGHBaHD6O5Xa7G41cHG3NmjUAJCUlne63ERGRYFBQYF5qSU09EjwOs1ggJcUcGSkogB49vFpaVW0928pcDeFi855KtuyuZGuZi5q6puejzHhzDf+44QysVkuTx6VpLQofs2bNYvz48aSlpeF0Opk/fz6fffYZH374IVu2bGH+/PlccskldO7cmbVr1zJjxgzOOeccBg8e7Kn6RUQkkDid5hyP6Oimj0dHQ3GxeZ4H1bsN3l+/i3VFFQ1Bo3DvAdwnmIhgC7XSq0sH+nTtQJ8uHehit/HgO9/zWf4e5i3dQvb5fTxab7BpUfjYvXs3119/Pbt27SI2NpbBgwfz4Ycf8sMf/pDCwkI+/vhjnn76aVwuF6mpqUyePJnf/va3nqpdREQCjd1uTi51ucxLLcdyuczjdrtHy7j/7fW8+k3Bcc/HRISaAePoWxc73TpFEnLM6EZoiIV7/r2WJz7KZ1haR87qHd+8b+52myM7Tqf5PtPS/OYSk7e0eMKpp7VkwoqIiAQYtxseewxychrP+QAwDHPOR1YW3Huvxz6QF6ws5O5/r8VigWtGppGeaKfPoVGNLnYblmMvB53E3Qu+Y8GqIuI72PjftLPpGhNx8i8I4lU+Hp1wKiIi0mpWq/lBW1hoBo2UlCOrXYqKzNUuEyd6LHisL67gN4vWAzD9wn7cNbbvab3eQ5cPZF1xBRtKnEx9LYf5/zeK0JAT1H6iVT45OebPox2t8mlf4zwiIuJ7GRnmB+2wYVBeDhs3mvdZWR79AN7nquHn/1pFTZ2bC9O7cucFpz9PIzI8hLlTsuhgC+XbbXv500cbmz7x2FU+MTEQEnJklU9ZmbnKp500WtPIh4iIeF9Ghrmc1ktzH+rdBtNez6F4/0G6d47iyZ8MbbMVKr26dODxKwdzx6ureW7pFs7o0YkLMxIan+THq3x8QSMfIiLiG1ar+UE7aJB578FJl08t3sgXm8qICLPy3HXDiY0Ma9PXv2RQEjeN6QHAjDfWULj3mK1FmrPKp6rK46t8/IXCh4iIBLWPvi/hL59uBuCxSYPJSPLMYoZZ4zMYltYRR1Ud2fNXU11Xf+Tg0at8muKlVT7+QuFDRESC1rYyF7948zsAbjyrBxOHdfPY9woPtfKXa7PoGBXG2qIKHnk378jBtDRzVUthobmq52iGYU62zcgwz2sHFD5ERCQoHaip47Z/rcJZXceI7p349SWeX0nSrWMkT/9kKBYL/Gv5Dt5eU2weOLzKJz7eXOVTUQF1deZ9bq7HV/n4m/bxLkVEpF0xDIN7/7OO/FInXew25k7JIjzUOx955/XvytRDHU9nvbWOzbsPzePw0Soff6TVLiIiEnT+8dV23vluJ6FWC3OnZJ26+Vcbmz62H6t27OPrLeXc/spq3p46hqjwUK+v8vFX7evdiohI0Ptmazm//5853+I3l2ZwRo84r9cQYrXwzNXD6Gq3sWl3Jb9ZuJ6GhuJeXOXjr9rfOxYRkaBV6qgie34O9W6Dy4cmc+NZPXxWSxe7jb9cm0WI1cLCnGJe+7bQZ7X4G4UPEREJCjV1bm5/ZRVlldWkJ9qZPWlQi/Zp8YSRPeO4Z1x/AH73zvesL67waT3+QuFDRESCwqPv5bK6YD/2iFCeu264OcfCD/zsnF6MzUgww9Grq6g4WOvrknxO4UNEpL1yu2H7dli3zrwP4H1FFuYU8dKyHQA8/ZOh9Ig/QSdRH7BYLDzx4yGkxkVSuPcgv1zwHX62obzX+UcsFBER7wqird1zdzqY9dY6AKZd0Of4fVX8QGxUGHOvHc7keV+zOLeUv36xlZ+d09vXZfmMRj5ERNqbw1u75+SYza369zfvc3LM5/PyTv0afqLiQC23vbKKqlo35/brwl1j+/m6pBMalBLL/RMyAfjDB/ms2L7XxxX5jsKHiEh7EkRbu7vdBtPfyKFg7wFSOkXyzNVDCWmjnWo9ZcqoNCYOTabebXDvf9ZSV+//P2dPUPgQEWlPWrK1u5+b88kmPs3fgy3U3Km2Y1S4r0s6JYvFwsMTB9IpKoyte1y8lVPs65J8QuFDRKQ9CZKt3fNLnMxZsgmAR68YxMBusT6uqPnsEWHccZ7Zfv2Zjzc13v22nVD4EBFpT4Jga3fDMHjkvVzcBowbkMCVw1N8XVKL/XR0dxJibBTvP8hr3/j/KFNbU/gQEWlPgmBr90827OaLTWWEh1j5zSWZvi6nVSLCQph2YV8A/vLpFg7U1Pm4Iu9S+BARaU8CfGv3mjo3j75nrsa5+eyepHWO8nFFrXfViFTS4qIoq6zmn19v93U5XuWfv10iIuI5Aby1+8vLtrO1zEV8h3Cyzw/sPhlhIVZm/NAc/Xjusy3tqvOpmoyJiLRHAbi1+15XDc8cmmT6y4v6Y48I83FFp++yId2Y99kWNpZW8tfPt/LLQ/vAeIzb7Rf/myt8iIi0V4e3dg8QTy7Ox1lVR2ZSDD8ekerrctpEiNXCLy7qz8//tYp/fLWNG87qQRe7zTPfLC8P462FPLUzhAn7N9M3pNpnXW39N+KKiIgckl/iZP6hVSH3T8j0+2ZiLXFRZgJDUmI5UFPP3M82e+abHOpqu2CLkzn2gUxK/RH74hN91tVW4UNERPyaYRg8/K65tHb8wETO7NXZ1yW1KYvFwt3j0gF4dXkBxfsPtu03ONTVdoOjjvu6ngXAbaEldIqJ8llXW4UPERHxa0vydvPlZnNp7azx/jsZ9nSM6dOZM3vFUVPv5s+H5rW0mYICKvM3c0fKD6nGyrnW/dwesss85qOutgofIiLit2rq3Dz6P/OSwC0/COyltSdjjn6Yk00XrCpi657KNnttw+HgNx2GsdUSTSI1PBW2jUZXrXzQ1VbhQ0RE/NbLy7azrcxFfAcbd5wX2EtrT2V49zguTO9KvdvgqY/bbvTjtaI63rb3IsRw85fwLcRZjmlo5oOutgofIiLil8orqxuW1t49rl9QLK09lV9cZI5+vPPdTnJ3Ok779b7fWcHvvi4F4O69qxlhOWZ0w0ddbRU+RETELz25eCPOqjoGJMdw5fDgWFp7KpnJMUwYkgzAEx/ln9ZrOatqyX51NTV1bi5IieJnoSV+09VW4UNERPzOhhIHr317aGntj4Jrae2pzBjblxCrhSUbdrNqx75WvYZhGPzqrXVsLz9AcmwET9w0BqsfdbVVkzEREfErRy+tvWRQIqP8bWmth7uE9urSgSuzUnhjZSF//HADr916JhZLy8LXK8t38N7aXYRaLfxlShadosP9qqutwoeIiPiVj/N289Xmcv9cWpuXBwsXwoYN5gqRiAiPdAmdNrYvC3OKWb51L19tLufsvvHN/tp1RRU8/K65QuhX49PJSut05KCfdLXVZRcREfEb5q61uYC5tDY1zo+W1h7qEkpOjjlPon9/894DXUK7dYxkypnmBNA/frgBwzCa9XWOqlqy56+mpt7NRZkJ3HJ2zzarqS21KHzMmzePwYMHExMTQ0xMDKNHj+b9999vOF5VVUV2djadO3emQ4cOTJ48mdLS0jYvWkREgtNLX29ne/kB4jvYyD6/j6/LOeJQl1DKysyuoDExEBJi3nuoS+gd5/UhKjyE74oq+Cj31J+lhmFwz4K1FOw9QEqnSP545ZAWX67xlhaFj5SUFB577DFWrVrFypUrueCCC7j88sv5/vvvAZgxYwbvvPMOCxYsYOnSpezcuZNJkyZ5pHAREQku5ZXVzDm0tPaecf3pYPOjmQEFBealltRUsyvo0TzUJbSL3cbNY8yRiyc+yqfeffLRj39+vZ0Pvi8hLMTCs9dmERvlv0uTWxQ+JkyYwCWXXELfvn3p168fjz76KB06dGD58uVUVFTw97//nSeffJILLriA4cOH8+KLL/L111+zfPlyT9UvIiJB4onFG3FWH15am3Lyk91u2L4d1q0z7z29L4nTac7xiI5u+riHuoTeek4vYiJC2VhayTvf7Tzh+15TuJ/fH+oE+5tLMhiS2rFN62hrrY6V9fX1LFiwAJfLxejRo1m1ahW1tbWMHTu24Zz09HTS0tJYtmwZZ555ZpOvU11dTXV1dcNjh+P0m6qIiEhgydvl4PVDS2sfmDAA68mW1npp0mcjdrv5fVwu81LLsTzUJTQ2Moyfn9ubP36Yz5PvrefS/71EWH7j911xyWVkf7Cb2nqDSwYlcsNZPdq0Bk9o8YTTdevW0aFDB2w2G7fddhsLFy4kMzOTkpISwsPD6dixY6PzExISKCkpOeHrzZ49m9jY2IZbamr7aCQjIiKmo5fWXjooiZE94058shcnfTaSlmYGnMJCsyto4zfg0S6hN43pQXxECAWVdby51dXofRs5OfzyX99QvP8g3TtH8djkwX47z+NoLQ4f/fv3Z82aNXzzzTfcfvvt3HDDDeTm5ra6gFmzZlFRUdFwKywsbPVriYhI4FmcW8rXW8oJD7Xyq/HpJz7RB5M+G1it5shKfLzXu4RGhVqZijkqNKfLCKrssQ3v++/9LmBxWCLhuHn26qHEBEgL+hb/lMLDw+nTpw/Dhw9n9uzZDBkyhGeeeYbExERqamrYv39/o/NLS0tJTEw84evZbLaG1TOHbyIi0j5U19U37Fr7f2efYmmtDyZ9NpKRYXYD9XaX0IICrtn6Nd2Mg5QSzr/quwKw2h3NY/Xm3Jj79q9mYH2FZ76/B5z2VGK32011dTXDhw8nLCyMJUuWMHnyZADy8/MpKChg9OjRp12oiIgEn5e+3s6O8gN0sdu441RLa5sz6bO42LNbw/uiS6jTia3qAHeF7uSe+t7MrUviYus+ptb0pg4rP7KUcd3e7z37vttYi8LHrFmzGD9+PGlpaTidTubPn89nn33Ghx9+SGxsLLfccgszZ84kLi6OmJgY7rzzTkaPHn3CyaYiItJ+lVVW8+clmwG4uzlLa3006fM43u4Seuh9Tzq4g+dsyWw1IplQM4D9hNLTUsXsqnVYvPG+21CLwsfu3bu5/vrr2bVrF7GxsQwePJgPP/yQH/7whwA89dRTWK1WJk+eTHV1NePGjWPu3LkeKVxERALbEx/l46yuY2C3GK7MOsXSWjgy6TMnx5zjcfSll8OTPrOyvLo1vFccet+hOTnM7J/G1Lo+7CcUG26eDd2EvWhHwL1vi9Hcnq1e4nA4iI2NpaKiQvM/RESC1PriCib85UsMAxbcNpozepxkhcvRDq92KSsz53hER5sjHkVF5qRPH+zQ6hWH3re7rIyJPa9grTWW2bW5XFPwrd+875Z8fit8iIiIVxmGwY+fW8bKHfu4bEgyc64Z1rIXaKrPR0aGudokGIPHYYfe9778rRS4wxhicfnV+27J57cf9a4VEZH24L/f7WTljn1EhoUw65KTLK09ET/aGt6rDr3vTgUFdArw963wISIiXnOgpo7Z/9sAwB3n9SYpNrJ1L+QnW8N7XZC878CLSyIiErDmfrqFEkcVqXGR3HpOL1+XIz6i8CEiIl5RUH6AF77YCsBvLskkIizExxWJryh8iIiIVzzyXi41dW7G9OnMuAEJvi5HfEjhQ0REPO7LTWV8lFtKiNXCAxMGBMTmZ+I5Ch8iIuJRtfVuHnznewB+emZ3+iUETidO8QyFDxER8ahXlu9g0+5KOkWFMWNsP1+XI35A4UNERDymvLKaJxdvBOCX4/oTGxUYW76LZyl8iIiIx/zpo404q+rITIrh6jMCZ+8R8SyFDxER8Yj1xRW8vqIAgN9dNoAQqyaZikkdTkUkOLjd7a/dth8zDIMH3/kew4AJQ5IZ2bOZG8dJu6DwISKBr6mNxtLT4Yor/GLDrfbov9/tZMX2fUSEWZk1vhX7t0hQU/gQkcB29BbrqalHtljPyYHCQr/Yary9abx/Sx+SO7Zy/xYJWhqTFJHA5XabIx5lZZCZCTExEBJi3mdmms8vWmSeJ14z7zNz/5aUTpH8TPu3SBMUPkQkcBUUmJdaUlPh2I6ZFgukpJgjIwUFvqmvHSrce4DnPzf3b/ntpRnav0WapPAhIoHL6TTneERHN308Oto87nR6t6527PD+LWf17sy4AYm+Lkf8lMKHiAQuu92cXOpyNX3c5TKP29XO2xu+2lzGh99r/xY5NYUPEQlcaWnmqpbCQjCMxscMA4qKzMmmaWpu5Wl1x+zf0j9RgU9OTOFDRAKX1Woup42Ph9xcqKiAujrzPjfXfH7iRPX78IJXlu9gY6n2b5Hm0f8jRSSwZWSYy2mHDYPycti40bzPytIyWy85ev+WX1yk/Vvk1NTnQ0QCX0YG9O+vDqc+8sTijTiq6shIiuGakbrEJaem8CEiwcFqhR49fF1Fu/P9zgpe+/bQ/i0TMrV/izSL/lkgIiKt4nYbPPjfXAwDfjQ4iVG9Ovu6JAkQCh8iItIqLy/bzrfb95r7t1yiuTXSfAofIiLSYptKncx+39y/Zdb4DLpp/xZpAYUPERFpkZo6N3e9vobqOjfn9OvC9aO7+7okCTAKHyIi0iJPfbyR3F0OOkaF8ccrB6uTqbSYwoeIiDTbt9v28tzSLQA8NmkQCTERPq5IApHCh4iINIuzqpYZb6zBMODK4SlcPDDJ1yVJgFL4EBGRZvndf3Mp3n+QlE6RPDAh09flSABT+BARkVN6f90u/rO6CKsFnvrJUOwRaqEurafwISIiJ1XqqGLWwnUA3HZub87oEefjiiTQKXyIiMgJGYbB3f9ey/4DtQzsFsN07VgrbaBF4WP27NmcccYZ2O12unbtysSJE8nPz290znnnnYfFYml0u+2229q0aBER8Y6Xl+3g8417sIVaefonQwkP1b9Z5fS16Ldo6dKlZGdns3z5chYvXkxtbS0XXXQRLper0Xm33noru3btarg9/vjjbVq0iIh43ubdTn7/vzwAZo1Pp09Xu48rkmDRol1tP/jgg0aP//nPf9K1a1dWrVrFOeec0/B8VFQUiYmJbVOhiIh43fFdTHv4uiQJIqc1flZRUQFAXFzjyUevvvoq8fHxDBw4kFmzZnHgwIETvkZ1dTUOh6PRTUREfOvpjzfy/c4jXUytVnUxlbbTopGPo7ndbqZPn86YMWMYOHBgw/PXXnst3bt3Jzk5mbVr13LvvfeSn5/PW2+91eTrzJ49mwcffLC1ZYiISBtbsf1IF9PZV6iLqbQ9i2EYRmu+8Pbbb+f999/nyy+/JCUl5YTnffLJJ1x44YVs3ryZ3r17H3e8urqa6urqhscOh4PU1FQqKiqIiYlpTWkiItJKzqpaxj/zBUX7DjI5K4Unrhri65IkQDgcDmJjY5v1+d2qkY+pU6fy7rvv8vnnn580eACMGjUK4IThw2azYbPZWlOGiIh/cLuhoACcTrDbIS0NrIG5KuTBd3Ip2md2Mf3dZepiKp7RovBhGAZ33nknCxcu5LPPPqNnz56n/Jo1a9YAkJSkPQBEJAjl5cHChbBhA1RVQUQEpKfDFVdARoavq2uRD9bv4t+rirBY4Mmr1MVUPKdF4SM7O5v58+fz9ttvY7fbKSkpASA2NpbIyEi2bNnC/PnzueSSS+jcuTNr165lxowZnHPOOQwePNgjb0BExGfy8mDOHCgrg9RUiI4GlwtycqCwEKZNC5gAsttRxay3jnQxHdlTXUzFc1o0Ljhv3jwqKio477zzSEpKari98cYbAISHh/Pxxx9z0UUXkZ6ezi9+8QsmT57MO++845HiRUR8xu02RzzKyiAzE2JiICTEvM/MNJ9ftMg8z88d7mK670AtA5JjmKEupuJhLb7scjKpqaksXbr0tAoSEQkIBQXmpZbUVLAcswzVYoGUFHNkpKAAevTwSYnN9a/lO1iqLqbiRfoNExFpDafTnOMRHd308eho87jT6d26Wmjz7koefe9IF9O+CepiKp6n8CEi0hp2uzm59JjtJRq4XOZxu/9+mJdVVvN/L62gus7ND/rGq4upeI3Ch4hIa6SlmataCgvh2EvShgFFReZk07Q039R3CpXVddz04gq2lx+gW8dInrhqiLqYitcofIiItIbVai6njY+H3FyoqIC6OvM+N9d8fuJEv+z3UVPn5vZXVrGuuIK46HD+dctIutrVxVS8x//+XyEiEigyMszltMOGQXk5bNxo3mdl+e0yW7fb4O5/f8cXm8qIDAvhHzeeQa8uHXxdlrQzrd7bRUREMANG//4B0eHUMAwe/V8eb6/ZSajVwrzrshia2tHXZUk7pPAhInK6rFa/X04L8MLnW/n7l9sA+OOPB3Ne/64+rkjaK/+L5iIi0ub+s6qI2e9vAODXl6RzxbCT78sl4kkKHyIiQe7T/N3c85+1ANz6g5787JzjN/kU8SaFDxGRIJZTsI87XllNvdtg4tBkZo33v0mw0v4ofIiIBKkteyq5+Z8rOFhbzzn9uvD4lerlIf5B4UNEJAiVVFRx/d+/Zd+BWoakxDJvSpb2bBG/od9EEZEgU3Gwlhv+8S3F+w/SMz6af9x4BtE2LW4U/6HwISISRKpq67n15ZXklzrpYrfx8s0j6dzB5uuyRBpR+BARCRL1boO7Xs/h2217sdtCeemmkaTGRfm6LJHjKHyIiAQBwzC47+31fPh9KeEhVl64fgSZyTG+LkukSQofIiJB4Jklm5j/TQEWCzx99VBG9+7s65JETkjhQ0QkwL2yfAdPf7wJgIcuH8glg5J8XJHIyWn6s4hIAPvHl9t4+L1cAKZd0IefntndxxWJnJrCh4hIAKp3Gzz6Xh7/+MrcKO6G0d2Z8cN+Pq5KpHkUPkREAszBmnqmv5HDh9+XAnDvxencdm4vLBZ1L5XAoPAhIhJAyiurueWllawp3E94iJU/XTWEy4Yk+7oskRZR+BARCRBb91Ry0z9XsKP8ALGRYbzw0+GM6qVVLRJ4FD5ERALAyu17ufXllew7UEtKp0j+edNI+nTtAG43FBSA0wl2O6SlgVULGcW/KXyIiPi599buYsaba6ipczM4JZa/33AGXew2yMuDhQthwwaoqoKICEhPhyuugIwMX5ctckIKHyIifsowDP72xTYe/V8eAGMzujLnmmFEhYeawWPOHCgrg9RUiI4GlwtycqCwEKZNUwARv6WxORERP1TvNnjgv983BI/rR3fn+Z+OMIOH222OeJSVQWYmxMRASIh5n5lpPr9okXmeiB/SyIeIiJ85UFPHtNdy+DhvNwC/uSSD//tBzyNLaQsKzEstqalw7PJaiwVSUsyRkYIC6NHDu8WLNIPCh4iIH9njrOaWl1awtqiC8FArT/9k6PHt0p1Oc45HdHTTLxIdDcXF5nkifkjhQ0TET2ze7eTGF1dQtO8gnaLC+Ov1IxjRI+74E+12c3Kpy2VeajmWy2Uet9s9X7RIK2jOh4iIH/hmazmT5n5N0b6DdO8cxVt3jGk6eIC5nDY93ZxYahiNjxkGFBWZk03T0jxfuEgraORDRMTH3lpdxK/+s46aejfD0jryt+tH0LmD7cRfYLWay2kLCyE315zjcXi1S1ERxMfDxInq9yF+S+FDRMRHqmrreejdXOZ/UwDAuAEJPHP1MCLCQk79xRkZ5nLaw30+iovNSy1ZWWbw0DJb8WMKHyIiPlBQfoA75q9ifbEDiwXuPL8Pd43tR4i1BZvDZWRA//7qcCoBR+FDRMTLFueWMvPNNTir6ugUFcZTPxnKef27tu7FrFYtp5WAo/AhIuIldfVu/vhRPs8v3QrAsLSOPHttFskdI31cmYh3tWhsbvbs2ZxxxhnY7Xa6du3KxIkTyc/Pb3ROVVUV2dnZdO7cmQ4dOjB58mRKS0vbtGgRkUBT6qji2r9+0xA8bhrTgzd+NlrBQ9qlFoWPpUuXkp2dzfLly1m8eDG1tbVcdNFFuFyuhnNmzJjBO++8w4IFC1i6dCk7d+5k0qRJbV64iEig+HpzGZfO+YJvt++lgy2UZ6/N4oEJAwgP1dwMaZ8shnHsIvHm27NnD127dmXp0qWcc845VFRU0KVLF+bPn8+VV14JwIYNG8jIyGDZsmWceeaZx71GdXU11dXVDY8dDgepqalUVFQQ01TzHBGRAOF2G8z9bDNPLt6I24D0RDtzp2TRq0sHX5cm0uYcDgexsbHN+vw+rdhdUVEBQFyc2Qhn1apV1NbWMnbs2IZz0tPTSUtLY9myZU2+xuzZs4mNjW24paamnk5JIiJ+YZ+rhptfWsGfPjKDx5XDU1h4xxgFDxFOI3y43W6mT5/OmDFjGDhwIAAlJSWEh4fTsWPHRucmJCRQUlLS5OvMmjWLioqKhlthYWFrSxIR8Qs5Bfv40Z+/5LP8PdhCrTw+eTB/+vEQIsOb0b9DpB1o9WqX7Oxs1q9fz5dffnlaBdhsNmy2k3TyExEJEIZh8PKyHTzyXi619QY9Okcxd8pwMpN1CVnkaK0KH1OnTuXdd9/l888/JyUlpeH5xMREampq2L9/f6PRj9LSUhITE0+7WBERf1VZXce9/1nLe2t3ATB+YCJ/uHIwMRFhPq5MxP+06LKLYRhMnTqVhQsX8sknn9CzZ89Gx4cPH05YWBhLlixpeC4/P5+CggJGjx7dNhWLiPiZDSUOLvvLl7y3dhehVgv3/SiTuVOyFDxETqBFIx/Z2dnMnz+ft99+G7vd3jCPIzY2lsjISGJjY7nllluYOXMmcXFxxMTEcOeddzJ69OgmV7qIiAQywzBYsLKI+95eT3Wdm6TYCP5y7TCGdz/BbrQiArRwqa3F0vSeAy+++CI33ngjYDYZ+8UvfsFrr71GdXU148aNY+7cuc2+7NKSpToiIr5yoKaO3y5az1uriwE4p18XnrpqyMl3oxUJYi35/D6tPh+eoPAhIv5uU6mTO15dzabdlVgt8IuL+nP7ub2xtmRTOJEg05LPb+3tIiLSAv9ZVcRvF63nYG09Xe025lwzjDN7dfZ1WSIBReFDRKQZDtbU88B/1/PmyiIAzu4Tz9NXDyVel1lEWkzhQ0TkFDbvriT71dXklzqxWGD6hf2YekEfQtr7ZRa3GwoKwOkEux3S0sCq/Wrk1BQ+RERO4u01xcx6ax0HauqJ72BjztVDOatPvK/L8r28PFi4EDZsgKoqiIiA9HS44grIyPB1deLnFD5ERJpQVVvPg+/k8tq3BQCM7tWZZ64ZSld7hI8r8wN5eTBnDpSVQWoqREeDywU5OVBYCNOmKYDISSl8iIgcY1uZizteXU3eLgcWC9x5QV/uurCvLrOAeall4UIzeGRmwuEWDDEx5uPcXFi0CPr31yUYOSGFDxGRo7y7die/+s86Kqvr6BwdztNXD+UHfbv4uiz/UVBgXmpJTT0SPA6zWCAlxRwZKSiAHj18UqL4P4UPERHMyyyPvpfHv5bvAGBkzzj+fM0wEmJ0maURp9Oc4xEd3fTx6GgoLjbPEzkBhQ8RafeK9x/k9ldWsbaoAoDs83szY2w/QkN02eA4drs5udTlMi+1HMvlMo/b7d6vTQKGwoeItGtfbS7jztdy2OuqoVNUGE/+ZCjn9+/q67L8V1qauaolJ6fxnA8Aw4CiIsjKMs8TOQGFDxFplwzD4PnPt/L4BxtwGzCoWyzzrssipVOUr0vzb1aruZy2sNCcXJqScmS1S1ERxMfDxImabConpfAhIu1OZXUddy/4jvfXmztz/3h4Cg9PHEhEWIiPKwsQGRnmctrDfT6Ki81LLVlZZvDQMls5BYUPEWlXtuyp5Of/WsXm3ZWEhVh4YMIApoxKO+Gu3XICGRnmclp1OJVWUPgQkXbjw+9L+MWb31FZXUdCjI151w0nK62Tr8sKXFarltNKqyh8iEjQq3cbPLk4n2c/3QKYy2ifvTaLLnZtCifiCwofIhLU9rlqmPZ6Dl9sKgPg5jE9mXVJOmFaRiviMwofIhK01hdXcNsrqyjad5CIMCt/mDyYy4d283VZIu2ewoeIBKX/rCri1wvXUV3npnvnKJ67bjgZSU00xRIRr1P4EJGgUlPn5pH3cnl5mdkm/fz+XXj6J8OIjQrzcWUicpjCh4gEjVJHFXe8uppVO/YBcNeF5m60Vu1GK+JXFD5EJCis2rGP215ZxR5nNfaIUJ7+yVAuzEho3he73epXIeJFCh8iEvDeXFHIbxetp6beTf8EO8//dDg94k+w6+qx8vKOdOqsqjI7daanmy3E1alTxCMUPkQkYNXVu3n0f3m8+NV2AMYPTORPPx5CtK2Zf9ry8mDOHCgrg9TUI3uU5OSYe5dMm6YAIuIBCh8iEpD2H6hh6vwcvtxs9u+YMbYfd17Qp/nzO9xuc8SjrKzx7qwxMebj3FxYtMhsIa5LMCJtSuFDRALOxlInt768kh3lB4gKD+HJq4Zy8cDElr1IQYF5qSU1tfG28GA+TkkxR0YKCtRCXKSNKXyISEBZnFvK9NdzcNXUkxoXyV+vH0F6Yiv6dzid5hyP6BPMDYmONndrdTpPr2AROY7Ch4gEBMMwePbTzTyxeCOGAaN7debZKVnERYe37gXtdnNyqctlXmo5lstlHrfbT69wETmOLmSKiN87UFPH1Ndy+NNHZvC4YXR3Xr5lZOuDB5jLadPTzYmlhtH4mGFAUZE52TQt7fSKF5HjaORDRPxa8f6D3PrSSnJ3OQgLsfDQ5QO5ZmQbBAKr1VxOW1hoTi5NSTmy2qWoCOLjYeJETTYV8QCFD5GmqOmUX/h2215uf2UV5a4aOkeH89xPh3NGj7i2+wYZGeZy2sN9PoqLzUstWVlm8NAyWxGPUPgQOZaaTvmF+d8U8MB/11NbbzAgOYYXrh9Bt46Rbf+NMjLM5bQKmyJeo/AhcjQ1nfK52no3D72Ty7+WmxvDXTo4iT9dOYTI8BDPfVOrVctpRbxI4UPkMDWd8rm9rhrueHUVy7fuxWKBX17UnzvO643l2D4cIhLQFD5EDlPTKZ/K3engZ/9aSdG+g0SHh/DM1cMYm9nMjeFEJKAofIgcpqZTPvPu2p3cvWAtB2vr6d45ir9eP4J+CeqvIRKsWjx2/PnnnzNhwgSSk5OxWCwsWrSo0fEbb7wRi8XS6HbxxRe3Vb0innN006mmqOlUm6t3Gzz+wQamzs/hYG09P+gbz9vZYxQ8RIJci8OHy+ViyJAhPPvssyc85+KLL2bXrl0Nt9dee+20ihTxCjWd8ipHVS23vrySuZ9tAeBn5/TixRvPoGPUaTQOE5GA0OLLLuPHj2f8+PEnPcdms5GY2MJNnkR8TU2nvNbfZPPuSn728kq2lrmwhVr5w+TBTBzWrc2/j4j4J4/M+fjss8/o2rUrnTp14oILLuCRRx6hc+fOTZ5bXV1NdXV1w2OHw+GJkkSapz03nfJSf5MleaVMf30Nzuo6kmMjeP6nIxiUEttmry8i/q/Nw8fFF1/MpEmT6NmzJ1u2bOHXv/4148ePZ9myZYSEHL9Of/bs2Tz44INtXYZI67XHplNe6G9y7MZwI3vEMfe6LOI72NroTYhIoLAYxrEXt1vwxRYLCxcuZOLEiSc8Z+vWrfTu3ZuPP/6YCy+88LjjTY18pKamUlFRQUxTO02KSNtyu+Gxx8ygcXR/EzDnuuTmmiM/997b6gDmqq7j7n9/x//WlQBw3Zlp3P+jAYSHBnGgE2lnHA4HsbGxzfr89vhS2169ehEfH8/mzZubDB82mw2bTf/yEfEZD/c3Kdx7gFtfXsmGEmfbbgwnIgHL4+GjqKiI8vJykpKSPP2tRKQ1PNjf5KvNZWTPX83+A7XEd7Dx3HVZjGjLjeFEJCC1OHxUVlayefPmhsfbtm1jzZo1xMXFERcXx4MPPsjkyZNJTExky5Yt3HPPPfTp04dx48a1aeEi0kaO7m/S1FBpK/qbGIbBP77azu//l0e922BISizP/XQ4SbEe2BhORAJOiy+4rly5kmHDhjFs2DAAZs6cybBhw7j//vsJCQlh7dq1XHbZZfTr149bbrmF4cOH88UXX+jSioi/auP+JlW19fxiwXc8/G4u9W6DSVndeOPnoxU8RKRBi0c+zjvvPE42R/XDDz88rYJExMvasL/Jzv0Huf2VVXxXVEGI1cJvLsngpjE9tDGciDSivV3k5LzUdEp8rA36m3yav5uZb6xh34FaOkaF8ey1WYzpE+/52kUk4Ch8yIl5qemU+IlW9jepq3fz5OKNDW3SB3WLZe6ULFLjorxRtYgEIIUPaZoXmk6JH7JaW7ScttRRxZ2v5fDttr0AXD+6O7+5NANb6PENBUVEDlP4kOO53eaIR1lZ46ZTMTHm49xcWLTI/FeyLsG0W19uKuOu13Mod9XQwRbK7EmDmDAk2ddliUgAUPiQ43m46ZQEtnq3wZwlm5jzySYMA9IT7cydkkWvLh18XZqIBAiFDzmeB5tOSWDb46xm+hs5fLW5HIBrRqbywIQBRITpMouINJ/ChxzPA02nJPAt21LOtNdz2OOsJjIshN9PGsgVw1J8XZaIBCCFDzne4aZTJ9porKjIXILZzKZTEtjcboN5S7fwxEf5uA3ol9CBuVOy6NNV4VNEWkfhQ47Xhk2nJLDtddUw4401LN24B4DJWSk8PHEAUeH60yEirae/INK0Nmg6JYFt5fa9TJ2fQ4mjCluolYcnDuSqEam+LktEgoDCh5xYK5tOSWAzDIO/frGVP3yQT73boFeXaOZOySI9sYn5PyIiraDwISfXwqZTEth2O6r41Vvr+GTDbgAuH5rMo1cMooNNfypEpO3oL4qIYBgGb6/ZyQP//Z6Kg7WEh1p5YEIm145M06ZwItLmFD5E2rk9zmp+s3AdH+WWAjCwWwx/+vEQXWYREY9R+BBppwzD4J21u3jg7fXsO1BLWIiFaRf05bbzehMWonk9IuI5Ch8i/sbt9vgk37LKau5btJ7315cAkJkUwxNXDSEjSaMdIuJ5Ch8i/iQv78jy5qoqc3lzerrZd6WNlje/t3YX9729nr2uGkKtFqZe0Ifs8/totMNXvBA2RfyNwoeIv8jLgzlzzN2EU1OPNHbLyTEbvk2bdloBpLyymvvf/p731u0CzA3hnrhqCAOSY9vqHUhLeSFsivgjhQ8Rf+B2mx9CZWWNW9rHxJiPc3Nh0SKz70or/lX8/rpd/HbRespdNYRYLWSf34ep5/chPFT/wvYZD4dNEX+m8CHiDwoKzH/9pqY23ksHzMcpKeaHVUFBi/qu7HXVcP/b63l37ZHRjj/9eAgDu2m0w6c8HDZF/J3Ch4g/cDrNYffo6KaPR0ebLe6dzma/5AfrS/jtonWUVZqjHbef25s7L+yDLTSkjYqWVvNQ2BQJFAofIv7Abjev97tc5r9+j+Vymcftp95JtryymofezeXtNTsB6Nu1A09cNYTBKR3buGhpNQ+ETZFAovAh4g/S0syJhjk5jYfhAQzD3E04K8s87wRq6ty89PV25nyyCWdVHVYL3HZub+4a21ejHf6mDcOmSCBS+BDxB1arucKhsNC83p+ScmQCYlERxMebuwk3cf3fMAw+yi3l9//LY0f5AQAGJMfw6BWDGJra0bvvQ5qnDcKmSCBT+BDxFxkZ5gqHw0svi4vNf/1mZZnBo4mVD9/vrODhd3NZvnUvAF3sNu4e15/JWSmEWLUni986jbApEgwshmEYvi7iaA6Hg9jYWCoqKohpajhSJNg1o+nUbmcVT3y4kTdXFWIYYAu1cusPenHbeb21A20gaarPR0bGCcOmiD9ryee3/kqJ+Bur9YQrHKpq6/n7l9uY++lmXDX1AEwYksy9F/cnpVOUF4uUNpGRYS6nVYdTaWcUPkQCgGEYvLt2F4+9v4Hi/QcBGJLakft/lMHw7nE+rk5Oy0nCpkiwUvgQ8XPfFe7n4XdzWbljHwBJsRHce3E6lw1Jxupv8zq0T4mINIPCh4if2lVxkD9+kM9bOcUARIaFcNu5vfnZOb2IDPfDpbPap0REmknhQ8TP7HPV8OJX23jhi61U1boBmJTVjXvGpZMYG+Hj6k5A+5SISAsofIj4iaJ9B/jbF9t4Y0UhB2vNyaQjunfivh9lMqS5/Tp8cdlD+5SISAspfIj4WO5OBy98voV31u6i3m2ufB+QHEP2+X0YPzARy7F7f5yIry57aJ8SEWkhhQ8RHzAMg2Vby3lu6VY+37in4fmz+8Tz83N7cXaf+OaHDvDtZQ/tUyIiLaTwIeJF9W6DD78v4fmlW/iuqAIAqwUuGZTEz8/pzaCUVmx17+vLHtqnRERaqMV/iT7//HMmTJhAcnIyFouFRYsWNTpuGAb3338/SUlJREZGMnbsWDZt2tRW9YoEpKrael5ZvoMLnviMO15dzXdFFdhCrVw/ujuf/fJ8/nJtVuuCB7TssocnHN6npLDQ3JfkaIf3KcnI0D4lItKgxSMfLpeLIUOGcPPNNzNp0qTjjj/++OPMmTOHl156iZ49e3Lfffcxbtw4cnNziYjw05n6Ih5ScaCWfy3fzj+/3k5ZZQ0AHaPCuH50D24Y3Z3OHWyn/018fdlD+5SISAu1OHyMHz+e8ePHN3nMMAyefvppfvvb33L55ZcD8PLLL5OQkMCiRYu4+uqrT69akQCxrczFK8t38Nq3BRw41Aa9W8dI/u8HPblqRCrRbbn/ij9c9mjFpngi0n616ZyPbdu2UVJSwtixYxuei42NZdSoUSxbtqzJ8FFdXU11dXXDY4fD0ZYliS+1s26Xux1VvLN2F2+vKWbtofkcAOmJdm47tzeXDk4iLMQD799ftmc/3X1K2tnvi0h71qbho6SkBICEhIRGzyckJDQcO9bs2bN58MEH27IM8QftpNulo6qWD9aX8N81O/l6SxmHVsoSYrXwg77x3HhWD87t16VlK1dayp8ue7R2n5J28vsiIiafr3aZNWsWM2fObHjscDhITU31YUVy2oK822VVbT2f5e/h7TXFLNmwm5o6d8Ox4d07cfnQZC4ZlER8W8znaK5AvuwR5L8vInK8Ng0fiYmJAJSWlpKUlNTwfGlpKUOHDm3ya2w2GzabF/9Ii2f5etmnh9S7Db7ZWs7ba3byv/W7cFbVNRzr27UDE4d147IhyaTG+XBb+0Dcnj1If19E5OTaNHz07NmTxMRElixZ0hA2HA4H33zzDbfffntbfivxV0HU7dIwDL7f6WBRTjHvrN1JqePI3KSk2AguG5LM5UO7kZFk9+xllZYItO3Zg+j3RUSar8Xho7Kyks2bNzc83rZtG2vWrCEuLo60tDSmT5/OI488Qt++fRuW2iYnJzNx4sS2rFv8la+XfZ4GwzDYUX6AFdv3snL7PpZvK2dH+YGG47GRYVwyKInLhyYzskec/21nH4gC+PdFRFqvxeFj5cqVnH/++Q2PD8/XuOGGG/jnP//JPffcg8vl4mc/+xn79+/n7LPP5oMPPlCPj/bCH5Z9QrNWTtTVu8nb5TTDxo69rNi+jz3O6kbn2EKtjM1MYOLQbpzTLx5bqB9uZR/I/OX3RUS8qsXh47zzzsM4tovhUSwWCw899BAPPfTQaRUmAcofln2eYOXEgR9dzpqoBFZs38fKHXtZvWMfrkM9OA4LD7EyOCWWET3iOKNHJ0b2jMMeEea5Wts7f/h9ERGv8/lqFwkyvl72eWjlhKt8P7tSerM5Mo6VNRGs2B3F969upc6yvdHp9ohQRnTvdChsxDE4JZaIMI1ueI2vf19ExCcsxsmGMXzA4XAQGxtLRUUFMU0Nw4rXGYbR8gmVTY0+ZGSc9rJPwzCoOFjLrooqShxVlFRUmf9dcZBdFVWUbilkV20IzpDwJr8+yVLDGYO6c0bPOEb0iKNfgp0Qzd3wPQ/9voiI97Tk81vhQ3C7DUqdVRTtO0jh3gMN94X7zP/eVVEFmJckbGFWwkOshIdasYVaCQ8NMf+7qWMhVsIPugitr8USHm5et7dYsHDkw/7oTHN0BDj8vGFAuauGkkNhY1fFQapq3TSHnTq6WWrIslYy0upkROUuupUXY3noIa2c8EfqcCoS0Fry+a3LLoHgNP8oG4ZBWWUNhfsONISLon1HQsbO/VXU1J/6A/2gu56DtfWnPO/E9p7G1zYWFx1OQkwESbERJMZGkBQTQYKzjKSFr5OU2pWEkHrslmPeU3QIFFdp5YS/CrRlwiLSagof/u402k4bhsFHuaX88cN8Nu+uPOm5IVYLyR0jSO0URWqnKFI6RZIaZ9536xSJ1WKhps5NdZ2b6rp6aurcDY9r6tzU1B9+XH/UeeZzdW73oXqOqq2hxqOfa+IEoFN0OIkxh0JGbAQJMRFNz8vYHgZv7YMDIVo5ISLixxQ+/NlptJ1etWMvv//fBlbt2AeYlzGSYiJI6RRFSlwkKZ2iSD0qYCTGRBDqiU3PvMlfVk7o8oGIyEkpfPirVrad3rKnksc/2MCH35cCEBFm5Zaze/Lzc3sTE+xLRv1h5YQ2SBMROSWFD3/VwrbTu51VPPPxJl5fUUi928BqgatGpDJ9bD8SY9tRgzdfbrCmDdJERJpF4cNfNbPtdOXeCl7YtJG/fbGVA4caZo3N6Mq9F6fTN6Gdzm3wxQZr2iBNRKTZFD781SnaTte6DvB63ECeeWcXZQfN0DE0tSOzxqczqldnb1frf7y9ckIbpImINJvCh786weRJw4D36zvyR0s/tnWMhYP19OgcxT0XpzN+YKL/7K7a3miDNBGRZlP48FdNTJ78NiqR2bUp5Fg7Qjh0jrAyfVwGV49MIyzQV6oEOm2QJiLSbAof/uzQ5Mnd/3mHX+/pyMf13cAKkbi5dUgcP5s0ig42/U/oF/xlma+ISADQJ5efc/Tsw/UdzmRDpZMQC/wkoxPTLxtK145Rvi5NjuYPy3xFRAKEwocfq613c8crq9lQ4qSL3car/zeKfu11BUsg8OUyXxGRAKLw4acMw2DWW+v4cnMZUeEhvHjjGQoegcAXy3xFRAKMwoefevrjTfx7VREhVgvPTsliYLdYX5ckzaUN0kRETkr/HPNDb64s5JklmwB4+PKBnN+/q48rEhERaTsKH37m8417+PVb6wDIPr83147S6ggREQkuCh9+JHengzteXU2d22Di0GR+eVF/X5ckIiLS5hQ+/MTO/Qe56Z/fUlldx+henXn8yiHqVioiIkFJ4cMPOKpquenFFZQ6qunbtQPP/XQ44aH6n0ZERIKTPuF8rKbOze2vrCK/1ElXu41/3jyS2MgwX5clIiLiMQofPmQYBr96ay1fbS4nKjyEf9x4Bt06Rvq6LBEREY9S+PChpxZv5K3VxYRYLcxVLw8REWkn1GTMG9zu4zpevrGqiDmfbAbg0YkDOU+9PEREpJ1Q+PC0vLwje31UVUFEBEv7nMGvD/YC4M4L+nD1SPXyEBGR9kPhw5Py8mDOHCgrg9RUiI7m+wMW7qhMpd4Kk3p1YOYP+3m2hiZGXbTPiIiI+JLCh6e43eaIR1kZZGaCxUKxEc5NYRm4COOsAzt5rKwci/ED8FQ/jyZGXUhPN7d+1w6rIiLiIwofnlJQYH7op6aCxUKFEcJNNX3ZTTj9LQd4LiSf8A27zfM8sQlZE6MuuFyQkwOFhebW7wogIiLiAxp/9xSn0xxtiI6mzoA7anuz0YgigRpeDN9ETHSEedzpbPvvfeyoS0wMhISY95mZ5vOLFpnniYiIeJnCh6fY7eZlDpeLefVJfOWOJZp6/hG+kWRLjTkKERFhntfWjhl1acRigZQUc2SkoKDtv7eIiMgpKHx4SloapKeTs/sgT9d1A+CRsB0MsB4Ew4CiIvOyR5oHVrocNerSpOhoz426iIiInILmfHiK1Urljy5n+r7vqcfCZfUlTAwphUqXGTzi42HiRM+sPDlq1IWYmOOPe3LURURE5BQ08uFBD+bXsSMkmm6WGh7e/TWWTRuhvByysjw74fPQqAuFheYoy9E8PeoiIiJyChr58JD31u5iwaoiLBZ48v9+QGzIMO/12rBazeW0hYWQm2vO8Ti82sXToy4iIiKn0OafPr/73e+wWCyNbunp6W39bfzaroqD/HrhOgDuOK83o3rHm8tpBw0y773xoZ+RYY6uDBtmjrZs9NKoi4iIyCl4ZORjwIABfPzxx0e+SWj7GWBxuw1mvvEdFQdrGZwSy/SxHu5gejIZGdC/vzqcioiIX/FIKggNDSUxMbFZ51ZXV1NdXd3w2OFweKIkr/nrF1tZtrWcyLAQnrl6GGEhPv6gt1o908RMRESklTzyybhp0yaSk5Pp1asXU6ZMoeAk/SRmz55NbGxswy01NdUTJXnF+uIK/vRRPgC/uyyTnvEnWOoqIiLSjlkM49jlEKfn/fffp7Kykv79+7Nr1y4efPBBiouLWb9+PfYmlnY2NfKRmppKRUUFMU0tE/VTB2vqufTPX7B1j4uLByQy77osLJ7as0VERMTPOBwOYmNjm/X53eaXXcaPH9/w34MHD2bUqFF0796dN998k1tuueW48202Gzabra3L8LpH3stl6x4XCTE2Zk8apOAhIiJyAh6fkNCxY0f69evH5s2bPf2tfObj3FJe/ca8tPTEj4fSKTrcxxWJiIj4L4+Hj8rKSrZs2UJSUpKnv5VP7HZWcc9/1gJw6w96cnbfeB9XJCIi4t/aPHz88pe/ZOnSpWzfvp2vv/6aK664gpCQEK655pq2/lY+53Yb/HLBWva6ashIiuGX4/r7uiQRERG/1+ZzPoqKirjmmmsoLy+nS5cunH322SxfvpwuXbq09bfyuZeWbefzjXuwhVqZc/VQbKEhvi5JRETE77V5+Hj99dfb+iXbhtvdps22NpQ4mP3+BgB+e2kGfRO0SZuIiEhztI/Wo3l5sHAhbNhgbiUfEWFuvHbFFa1qM15VW89dr62hps7NBeldue7M7h4oWkREJDgFf/jIy4M5c6CsDFJTj2ywlpNjbrzWin1OHv8gn/xSJ/Edwnn8ysFaVisiItICwb3Jh9ttjniUlUFmJsTEQEiIeZ+ZaT6/aJF5XjMt3biHf3y1DYA/XjmE+A6B36NERETEm4J75KOgwLzUkpoKx45OWCzmVvN5eeZ5J9v/5NB8kfI9+/nl+6UA3DC6O+end/Vc7SIiIkEquMOH02nO8YiOpsQIY3J1BnZLPTHUY7fUY4+oxR5djv2LQmJ21GOPCMUeEYY9IpSYiDBiIkKxF27H/uF7ROXncm/saPZEp9HXWsWsXrrUIiIi0hrBHT7sdnNyqcvF/g4dKMYGh3eyOXwf2wW+d5i3ExpESNIA6i1Wwg03z+z4kIi5H7dqvoiIiEh7F9zhIy3NXNWSk0P3jFgWhefiNEJwEoLTsOIoKcfZLQ1H1kic1fU4qmpxVtXirKrDWVWLY58Tp9tKvcW8Afw6rJDMPkmQm2vOF+nf/7SW7IqIiLQ3wR0+rFZzOW1hIZF56xmaknJktUtREcTHw9U/aXr0Yvt2uP9+jPh4Dto74iSEeiwkW2qAFswXERERkUaCO3yAGSymTTvS56O42LwUk5UFEyee+LLJofkiluhooixuojhmRUx0tPlaTqfH34KIiEgwCf7wAWbA6N+/ZR1Oj5ovQkzM8cddLvO4XZ1NRUREWqJ9hA8wg0ZLLo8cNV+EzMzGS3UNw7xsk5VlniciIiLNppmSJ3J4vkh8vDm5tKIC6urM+9xc8/mJEzXZVEREpIX0yXkyh+eLDBsG5eWwcaN5n5WlZbYiIiKt1H4uu7RWa+aLSNto452IRUTEPyh8NEdL54vI6WvjnYhFRMR/KHyI//HATsQiIuI/NIYt/sUDOxGLiIh/UfgQ/9KSnYhFRCQgKXyIfzlqJ+ImRUebx9VZVkQkYCl8iH85urNsU9RZVkQk4Cl8iH853Fm2sNDsJHu0w51lMzLUWVZEJIApfIh/UWdZEZGgp7/g4n/UWVZEJKipz4f4J3WWFREJWgof4r/UWVZEJCjpn5EiIiLiVQofIiIi4lUKHyIiIuJVCh8iIiLiVQofIiIi4lUKHyIiIuJVCh8iIiLiVQofIiIi4lUKHyIiIuJVftfh1Di0k6nD4fBxJSIiItJchz+3jWN3JG+C34UPp9MJQGpqqo8rERERkZZyOp3Exsae9ByL0ZyI4kVut5udO3dit9uxWCxt+toOh4PU1FQKCwuJiYlp09eWI/Rz9g79nL1DP2fv0c/aOzz1czYMA6fTSXJyMtZTbALqdyMfVquVlJQUj36PmJgY/WJ7gX7O3qGfs3fo5+w9+ll7hyd+zqca8ThME05FRETEqxQ+RERExKvaVfiw2Ww88MAD2Gw2X5cS1PRz9g79nL1DP2fv0c/aO/zh5+x3E05FREQkuLWrkQ8RERHxPYUPERER8SqFDxEREfEqhQ8RERHxKoUPERER8ap2Ez6effZZevToQUREBKNGjeLbb7/1dUlBZ/bs2ZxxxhnY7Xa6du3KxIkTyc/P93VZQe+xxx7DYrEwffp0X5cSdIqLi7nuuuvo3LkzkZGRDBo0iJUrV/q6rKBSX1/PfffdR8+ePYmMjKR37948/PDDzdqcTE7u888/Z8KECSQnJ2OxWFi0aFGj44ZhcP/995OUlERkZCRjx45l06ZNXqmtXYSPN954g5kzZ/LAAw+wevVqhgwZwrhx49i9e7evSwsqS5cuJTs7m+XLl7N48WJqa2u56KKLcLlcvi4taK1YsYLnn3+ewYMH+7qUoLNv3z7GjBlDWFgY77//Prm5uTzxxBN06tTJ16UFlT/84Q/MmzePv/zlL+Tl5fGHP/yBxx9/nD//+c++Li3guVwuhgwZwrPPPtvk8ccff5w5c+bw3HPP8c033xAdHc24ceOoqqryfHFGOzBy5EgjOzu74XF9fb2RnJxszJ4924dVBb/du3cbgLF06VJflxKUnE6n0bdvX2Px4sXGueeea9x1112+Limo3HvvvcbZZ5/t6zKC3qWXXmrcfPPNjZ6bNGmSMWXKFB9VFJwAY+HChQ2P3W63kZiYaPzxj39seG7//v2GzWYzXnvtNY/XE/QjHzU1NaxatYqxY8c2PGe1Whk7dizLli3zYWXBr6KiAoC4uDgfVxKcsrOzufTSSxv9bkvb+e9//8uIESP48Y9/TNeuXRk2bBh//etffV1W0DnrrLNYsmQJGzduBOC7777jyy+/ZPz48T6uLLht27aNkpKSRn8/YmNjGTVqlFc+G/1uV9u2VlZWRn19PQkJCY2eT0hIYMOGDT6qKvi53W6mT5/OmDFjGDhwoK/LCTqvv/46q1evZsWKFb4uJWht3bqVefPmMXPmTH7961+zYsUKpk2bRnh4ODfccIOvywsav/rVr3A4HKSnpxMSEkJ9fT2PPvooU6ZM8XVpQa2kpASgyc/Gw8c8KejDh/hGdnY269ev58svv/R1KUGnsLCQu+66i8WLFxMREeHrcoKW2+1mxIgR/P73vwdg2LBhrF+/nueee07how29+eabvPrqq8yfP58BAwawZs0apk+fTnJysn7OQSzoL7vEx8cTEhJCaWlpo+dLS0tJTEz0UVXBberUqbz77rt8+umnpKSk+LqcoLNq1Sp2795NVlYWoaGhhIaGsnTpUubMmUNoaCj19fW+LjEoJCUlkZmZ2ei5jIwMCgoKfFRRcLr77rv51a9+xdVXX82gQYP46U9/yowZM5g9e7avSwtqhz//fPXZGPThIzw8nOHDh7NkyZKG59xuN0uWLGH06NE+rCz4GIbB1KlTWbhwIZ988gk9e/b0dUlB6cILL2TdunWsWbOm4TZixAimTJnCmjVrCAkJ8XWJQWHMmDHHLRXfuHEj3bt391FFwenAgQNYrY0/ikJCQnC73T6qqH3o2bMniYmJjT4bHQ4H33zzjVc+G9vFZZeZM2dyww03MGLECEaOHMnTTz+Ny+Xipptu8nVpQSU7O5v58+fz9ttvY7fbG64bxsbGEhkZ6ePqgofdbj9uHk10dDSdO3fW/Jo2NGPGDM466yx+//vfc9VVV/Htt9/ywgsv8MILL/i6tKAyYcIEHn30UdLS0hgwYAA5OTk8+eST3Hzzzb4uLeBVVlayefPmhsfbtm1jzZo1xMXFkZaWxvTp03nkkUfo27cvPXv25L777iM5OZmJEyd6vjiPr6fxE3/+85+NtLQ0Izw83Bg5cqSxfPlyX5cUdIAmby+++KKvSwt6WmrrGe+8844xcOBAw2azGenp6cYLL7zg65KCjsPhMO666y4jLS3NiIiIMHr16mX85je/Maqrq31dWsD79NNPm/ybfMMNNxiGYS63ve+++4yEhATDZrMZF154oZGfn++V2iyGoTZyIiIi4j1BP+dDRERE/IvCh4iIiHiVwoeIiIh4lcKHiIiIeJXCh4iIiHiVwoeIiIh4lcKHiIiIeJXCh4iIiHiVwoeIiIh4lcKHiIiIeJXCh4iIiHjV/wOHfRfbce6NGgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model_30 = np.poly1d(params_30)\n",
    "\n",
    "y_pred_overfit = model_30(x)\n",
    "plt.plot(x, y, 'ro', alpha=0.5)\n",
    "plt.plot(x, y_pred_overfit)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note how, even though there is a clear linear trend, the line-of-\"best\"-fit wobbles through the data? The model has too much freedom, and ends up trusting the data too much.\n",
    "\n",
    "\n",
    "\n",
    "#### Exercise\n",
    "\n",
    "To see the effect of overfitting, let's create a new dataset using the same formula as before, and compute the difference in SSE (sum squared error) for both models.\n",
    "\n",
    "1. Create new data by choosing 50 points randomly from 0 to 100 (see `np.random.random`)\n",
    "2. Create new y values with random error from the same distribution we originally created `y` from (same error, same m and c values)\n",
    "3. Compute the training error. That is, the difference between `y_pred_linear` and `y`, and the difference between  `y_pred_overfit` and `y`. Which model has a lower training error?\n",
    "4. Retrain the model with a sample from the training data. Notice how the parameters change significantly as you keep sampling the data. \n",
    "\n",
    "The results you see in this exercise are also shown if you were to choose another sample from the original dataset. In other words, this model is not stable because it is overfitting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "779.7522825656653 591.0643051438749\n",
      "7050.380179325607 1.3073319679258988e+31\n"
     ]
    },
    {
     "data": {
      "image/png": "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ERERUY7lZHhAq9Vi6dKl2L17d+o5SZKwe/duNDQ05KJLRERElEdyVgdl06ZNWL9+PZYtW4arrroK//RP/4RwOIy77rorV10iIiKiPJGzgPKtb30Lfr8fW7Zsgc/nw5VXXonXXnvtnImzRERENPsoZFmWc92JTAWDQZjNZoiiCJPJlOvuEBER0Thk8vnNJSpERESUdxhQiIiIKO8woBAREVHeYUAhIiKivJOzVTyTkZzXOxV78hAREdHUSH5uj2d9TkEGlFAoBACoqanJcU+IiIgoU6FQCGaz+YLHFOQyY0mScOrUKRiNRigUigm/TzAYRE1NDbq6urhceYrxWk8fXuvpxes9fXitp89UXWtZlhEKhVBVVQWl8sKzTApyBEWpVKK6ujpr72cymfiPfZrwWk8fXuvpxes9fXitp89UXOuLjZwkcZIsERER5R0GFCIiIso7szqgCIKAn/70pxAEIdddmfF4racPr/X04vWePrzW0ycfrnVBTpIlIiKimW1Wj6AQERFRfmJAISIiorzDgEJERER5hwGFiIiI8s6sDii//e1vcckll0Cn06G+vh5vv/12rrtU0LZu3YovfelLMBqNKC8vR2NjI44dO5Z2TDQaRXNzM8rKylBcXIy1a9eir68vRz2eObZt2waFQoEHHngg9RyvdXb19PTg29/+NsrKylBUVIRFixbh4MGDqXZZlrFlyxbYbDYUFRVh5cqV+PDDD3PY48I0OjqKn/zkJ5g/fz6Kiopw6aWX4uc//3na3i281hPz5ptv4pZbbkFVVRUUCgV27tyZ1j6e6zowMIB169bBZDKhpKQEd999N4aGhqamw/Is9cILL8harVb+wx/+IB89elS+55575JKSErmvry/XXStYq1atkp955hn5gw8+kA8fPizfdNNNst1ul4eGhlLH3HfffXJNTY28e/du+eDBg/Ly5cvlL3/5yznsdeF7++235UsuuUS+4oor5O9973up53mts2dgYECeN2+efOedd8rt7e3yiRMn5Ndff13+6KOPUsds27ZNNpvN8s6dO+X33ntP/vrXvy7Pnz9fHh4ezmHPC88TTzwhl5WVya+88op88uRJ+cUXX5SLi4vlX//616ljeK0n5r//+7/lH//4x/JLL70kA5BbW1vT2sdzXVevXi0vXrxYPnDggPyXv/xF/sIXviDffvvtU9LfWRtQ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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# From the solutions, overfitting will obviously perform poorly on the test set compared to a simpler model.\n",
    "# 50 points randomly from 0 to 100\n",
    "x_test = np.random.random(50) * 100\n",
    "error_test = np.random.randn(len(x_test)) * 5\n",
    "y_test = x_test * 3 + 1 + error_test\n",
    "\n",
    "# Training errors\n",
    "SSE_linear = np.sum((y_pred_linear - y) ** 2)\n",
    "SSE_overfit = np.sum((y_pred_overfit - y) ** 2)\n",
    "\n",
    "print(SSE_linear, SSE_overfit)  # Overfit is lower for training error\n",
    "\n",
    "plt.plot(x_test, y_test, 'go', alpha=0.5)\n",
    "\n",
    "y_est_linear = model(x_test)\n",
    "y_est_poly = model_30(x_test)\n",
    "\n",
    "# Training errors\n",
    "SSE_est_linear = np.sum((y_est_linear - y_test) ** 2)\n",
    "SSE_est_overfit = np.sum((y_est_poly - y_test) ** 2)\n",
    "\n",
    "print(SSE_est_linear, SSE_est_overfit)  # SSE is **very** high for the overfit model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*For solution see `solutions/overfitting_one.py`*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Overfitting with too many variables\n",
    "\n",
    "Overfitting can be caused by a large number of factors. In the above, overfitting was caused by the model being too complex. Overfitting can also happen when you have too many input variables, even if some of them are just random noise!\n",
    "\n",
    "What happens in this case, is that unusual patterns are picked up in the data, leading to pattern matching algorithms (of which all the algorithms we have seen so far are) finding patterns in noise, rather than underlying trends. It results in the same problem overly-complex models do - low training error, high testing error. The cause this time is that the coincidental patterns in the training data are usually not present in the testing data, so they no longer work.\n",
    "\n",
    "This is a case of spurious correlations. For a humorous look at this problem, see http://www.tylervigen.com/spurious-correlations\n",
    "\n",
    "![Spurious Correlation](img/spurious.png)\n",
    "\n",
    "<small>Note: The above data has a correlation $r=0.95$</small>\n",
    "\n",
    "If you compare enough variables, you *will* find a correlation. Whether that makes sense or not is your job as an analyst. \n",
    "\n",
    "All too often in the \"big data\" age, we simply think \"add more data until the computer learns\", but the actual case is the opposite - too much data leads to incorrect learning and wasted effort.\n",
    "\n",
    "To see this in action, we'll download all stock prices for the S&P500, and then use those to predict AAPL:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Let's extract a large number of stocks\n",
    "import quandl\n",
    "import my_secrets\n",
    "quandl.ApiConfig.api_key = my_secrets.QUANDL_API_KEY"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(\"data/sp500.csv\") as inf:\n",
    "    stocks = inf.readlines()[1:]  # Skip header\n",
    "    # Remove whitespace around stocks, ignore empty lines (like the last one)\n",
    "    stocks = [stock.strip() for stock in stocks if stock.strip()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['MMM', 'ABT', 'ABBV', 'ABMD', 'ACN']"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stocks[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading batch 0\n",
      "Downloading batch 10\n",
      "Downloading batch 20\n",
      "Downloading batch 30\n",
      "Downloading batch 40\n",
      "Downloading batch 50\n",
      "Downloading batch 60\n",
      "Downloading batch 70\n",
      "Downloading batch 80\n",
      "Downloading batch 90\n",
      "Downloading batch 100\n",
      "Downloading batch 110\n",
      "Downloading batch 120\n",
      "Downloading batch 130\n",
      "Downloading batch 140\n",
      "Downloading batch 150\n",
      "Downloading batch 160\n",
      "Downloading batch 170\n",
      "Downloading batch 180\n",
      "Downloading batch 190\n",
      "Downloading batch 200\n",
      "Downloading batch 210\n",
      "Downloading batch 220\n",
      "Downloading batch 230\n",
      "Downloading batch 240\n",
      "Downloading batch 250\n",
      "Downloading batch 260\n",
      "Downloading batch 270\n",
      "Downloading batch 280\n",
      "Downloading batch 290\n",
      "Downloading batch 300\n",
      "Downloading batch 310\n",
      "Downloading batch 320\n",
      "Downloading batch 330\n",
      "Downloading batch 340\n",
      "Downloading batch 350\n",
      "Downloading batch 360\n",
      "Downloading batch 370\n",
      "Downloading batch 380\n",
      "Downloading batch 390\n",
      "Downloading batch 400\n",
      "Downloading batch 410\n",
      "Downloading batch 420\n",
      "Downloading batch 430\n",
      "Downloading batch 440\n",
      "Downloading batch 450\n",
      "Downloading batch 460\n",
      "Downloading batch 470\n",
      "Downloading batch 480\n",
      "Downloading batch 490\n",
      "Downloading batch 500\n"
     ]
    }
   ],
   "source": [
    "import time\n",
    "\n",
    "# Too many to download in one go - get in batches instead\n",
    "batches = []\n",
    "batch_size = 10\n",
    "\n",
    "for i in range(0, len(stocks), batch_size):\n",
    "    print(\"Downloading batch {}\".format(i))\n",
    "    current_batch = quandl.get_table('WIKI/PRICES', ticker = stocks[i:i+batch_size], \n",
    "                            qopts = { 'columns': ['ticker', 'date', 'adj_close'] }, \n",
    "                            date = { 'gte': '2017-01-01', 'lte': '2019-01-01' }, \n",
    "                            paginate=True)\n",
    "    batches.append(current_batch)\n",
    "    time.sleep(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ticker</th>\n",
       "      <th>date</th>\n",
       "      <th>adj_close</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>None</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>ZTS</td>\n",
       "      <td>2018-03-27</td>\n",
       "      <td>81.86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ZTS</td>\n",
       "      <td>2018-03-26</td>\n",
       "      <td>83.73</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ZTS</td>\n",
       "      <td>2018-03-23</td>\n",
       "      <td>80.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>ZTS</td>\n",
       "      <td>2018-03-22</td>\n",
       "      <td>82.06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ZTS</td>\n",
       "      <td>2018-03-21</td>\n",
       "      <td>84.10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     ticker       date  adj_close\n",
       "None                             \n",
       "0       ZTS 2018-03-27      81.86\n",
       "1       ZTS 2018-03-26      83.73\n",
       "2       ZTS 2018-03-23      80.60\n",
       "3       ZTS 2018-03-22      82.06\n",
       "4       ZTS 2018-03-21      84.10"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "current_batch.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.concat(batches)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "stocks = data.pivot(index=\"date\", columns=\"ticker\", values=\"adj_close\")\n",
    "# Fill any missing data using a forward fill\n",
    "stocks.fillna(method='ffill', inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(Timestamp('2017-01-03 00:00:00'), Timestamp('2018-03-27 00:00:00'))"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stocks.index.min(), stocks.index.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "stock_to_predict = \"AAPL\"\n",
    "X = stocks[[column for column in stocks.columns if column != stock_to_predict]]\n",
    "y = stocks[stock_to_predict]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "split_date = \"2018-01-01\"\n",
    "X_train, X_test = X[:split_date], X[split_date:]\n",
    "y_train, y_test = y[:split_date], y[split_date:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We've seen a few methods of doing linear regression now. Use the one you are more comfortable with. Here, we will use sklearn:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "Input X contains NaN.\nLinearRegression does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[33], line 5\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mlinear_model\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m LinearRegression\n\u001b[0;32m      3\u001b[0m model \u001b[38;5;241m=\u001b[39m LinearRegression()\n\u001b[1;32m----> 5\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_train\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\sklearn\\base.py:1351\u001b[0m, in \u001b[0;36m_fit_context.<locals>.decorator.<locals>.wrapper\u001b[1;34m(estimator, *args, **kwargs)\u001b[0m\n\u001b[0;32m   1344\u001b[0m     estimator\u001b[38;5;241m.\u001b[39m_validate_params()\n\u001b[0;32m   1346\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m config_context(\n\u001b[0;32m   1347\u001b[0m     skip_parameter_validation\u001b[38;5;241m=\u001b[39m(\n\u001b[0;32m   1348\u001b[0m         prefer_skip_nested_validation \u001b[38;5;129;01mor\u001b[39;00m global_skip_validation\n\u001b[0;32m   1349\u001b[0m     )\n\u001b[0;32m   1350\u001b[0m ):\n\u001b[1;32m-> 1351\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfit_method\u001b[49m\u001b[43m(\u001b[49m\u001b[43mestimator\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\sklearn\\linear_model\\_base.py:578\u001b[0m, in \u001b[0;36mLinearRegression.fit\u001b[1;34m(self, X, y, sample_weight)\u001b[0m\n\u001b[0;32m    574\u001b[0m n_jobs_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mn_jobs\n\u001b[0;32m    576\u001b[0m accept_sparse \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpositive \u001b[38;5;28;01melse\u001b[39;00m [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcsr\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcsc\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcoo\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m--> 578\u001b[0m X, y \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_data\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m    579\u001b[0m \u001b[43m    \u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maccept_sparse\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maccept_sparse\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_numeric\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmulti_output\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\n\u001b[0;32m    580\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    582\u001b[0m has_sw \u001b[38;5;241m=\u001b[39m sample_weight \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m    583\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m has_sw:\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\sklearn\\base.py:650\u001b[0m, in \u001b[0;36mBaseEstimator._validate_data\u001b[1;34m(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)\u001b[0m\n\u001b[0;32m    648\u001b[0m         y \u001b[38;5;241m=\u001b[39m check_array(y, input_name\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124my\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mcheck_y_params)\n\u001b[0;32m    649\u001b[0m     \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 650\u001b[0m         X, y \u001b[38;5;241m=\u001b[39m \u001b[43mcheck_X_y\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mcheck_params\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    651\u001b[0m     out \u001b[38;5;241m=\u001b[39m X, y\n\u001b[0;32m    653\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m no_val_X \u001b[38;5;129;01mand\u001b[39;00m check_params\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mensure_2d\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m):\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\sklearn\\utils\\validation.py:1192\u001b[0m, in \u001b[0;36mcheck_X_y\u001b[1;34m(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, estimator)\u001b[0m\n\u001b[0;32m   1187\u001b[0m         estimator_name \u001b[38;5;241m=\u001b[39m _check_estimator_name(estimator)\n\u001b[0;32m   1188\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[0;32m   1189\u001b[0m         \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mestimator_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m requires y to be passed, but the target y is None\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m   1190\u001b[0m     )\n\u001b[1;32m-> 1192\u001b[0m X \u001b[38;5;241m=\u001b[39m \u001b[43mcheck_array\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m   1193\u001b[0m \u001b[43m    \u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1194\u001b[0m \u001b[43m    \u001b[49m\u001b[43maccept_sparse\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maccept_sparse\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1195\u001b[0m \u001b[43m    \u001b[49m\u001b[43maccept_large_sparse\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maccept_large_sparse\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1196\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1197\u001b[0m \u001b[43m    \u001b[49m\u001b[43morder\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43morder\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1198\u001b[0m \u001b[43m    \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1199\u001b[0m \u001b[43m    \u001b[49m\u001b[43mforce_all_finite\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mforce_all_finite\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1200\u001b[0m \u001b[43m    \u001b[49m\u001b[43mensure_2d\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mensure_2d\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1201\u001b[0m \u001b[43m    \u001b[49m\u001b[43mallow_nd\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mallow_nd\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1202\u001b[0m \u001b[43m    \u001b[49m\u001b[43mensure_min_samples\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mensure_min_samples\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1203\u001b[0m \u001b[43m    \u001b[49m\u001b[43mensure_min_features\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mensure_min_features\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1204\u001b[0m \u001b[43m    \u001b[49m\u001b[43mestimator\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mestimator\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1205\u001b[0m \u001b[43m    \u001b[49m\u001b[43minput_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mX\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1206\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m   1208\u001b[0m y \u001b[38;5;241m=\u001b[39m _check_y(y, multi_output\u001b[38;5;241m=\u001b[39mmulti_output, y_numeric\u001b[38;5;241m=\u001b[39my_numeric, estimator\u001b[38;5;241m=\u001b[39mestimator)\n\u001b[0;32m   1210\u001b[0m check_consistent_length(X, y)\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\sklearn\\utils\\validation.py:1003\u001b[0m, in \u001b[0;36mcheck_array\u001b[1;34m(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)\u001b[0m\n\u001b[0;32m    997\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[0;32m    998\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFound array with dim \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m. \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m expected <= 2.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m    999\u001b[0m         \u001b[38;5;241m%\u001b[39m (array\u001b[38;5;241m.\u001b[39mndim, estimator_name)\n\u001b[0;32m   1000\u001b[0m     )\n\u001b[0;32m   1002\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m force_all_finite:\n\u001b[1;32m-> 1003\u001b[0m     \u001b[43m_assert_all_finite\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m   1004\u001b[0m \u001b[43m        \u001b[49m\u001b[43marray\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1005\u001b[0m \u001b[43m        \u001b[49m\u001b[43minput_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1006\u001b[0m \u001b[43m        \u001b[49m\u001b[43mestimator_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mestimator_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1007\u001b[0m \u001b[43m        \u001b[49m\u001b[43mallow_nan\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mforce_all_finite\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m==\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mallow-nan\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1008\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m   1010\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m copy:\n\u001b[0;32m   1011\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m _is_numpy_namespace(xp):\n\u001b[0;32m   1012\u001b[0m         \u001b[38;5;66;03m# only make a copy if `array` and `array_orig` may share memory`\u001b[39;00m\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\sklearn\\utils\\validation.py:126\u001b[0m, in \u001b[0;36m_assert_all_finite\u001b[1;34m(X, allow_nan, msg_dtype, estimator_name, input_name)\u001b[0m\n\u001b[0;32m    123\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m first_pass_isfinite:\n\u001b[0;32m    124\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m--> 126\u001b[0m \u001b[43m_assert_all_finite_element_wise\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m    127\u001b[0m \u001b[43m    \u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    128\u001b[0m \u001b[43m    \u001b[49m\u001b[43mxp\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mxp\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    129\u001b[0m \u001b[43m    \u001b[49m\u001b[43mallow_nan\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mallow_nan\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    130\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmsg_dtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmsg_dtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    131\u001b[0m \u001b[43m    \u001b[49m\u001b[43mestimator_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mestimator_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    132\u001b[0m \u001b[43m    \u001b[49m\u001b[43minput_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    133\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\sklearn\\utils\\validation.py:175\u001b[0m, in \u001b[0;36m_assert_all_finite_element_wise\u001b[1;34m(X, xp, allow_nan, msg_dtype, estimator_name, input_name)\u001b[0m\n\u001b[0;32m    158\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m estimator_name \u001b[38;5;129;01mand\u001b[39;00m input_name \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mX\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m has_nan_error:\n\u001b[0;32m    159\u001b[0m     \u001b[38;5;66;03m# Improve the error message on how to handle missing values in\u001b[39;00m\n\u001b[0;32m    160\u001b[0m     \u001b[38;5;66;03m# scikit-learn.\u001b[39;00m\n\u001b[0;32m    161\u001b[0m     msg_err \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m    162\u001b[0m         \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mestimator_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m does not accept missing values\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m    163\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m encoded as NaN natively. For supervised learning, you might want\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    173\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m#estimators-that-handle-nan-values\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m    174\u001b[0m     )\n\u001b[1;32m--> 175\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(msg_err)\n",
      "\u001b[1;31mValueError\u001b[0m: Input X contains NaN.\nLinearRegression does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "model = LinearRegression()\n",
    "\n",
    "model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "One problem - sklearn doesn't handle NaN values - missing data - very well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "ticker\n",
       "APTV    True\n",
       "BHGE    True\n",
       "BKNG    True\n",
       "CBRE    True\n",
       "DWDP    True\n",
       "DXC     True\n",
       "HLT     True\n",
       "INFO    True\n",
       "IQV     True\n",
       "TPR     True\n",
       "WELL    True\n",
       "dtype: bool"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Here are the culprits:\n",
    "is_missing = X_train.isna().any()\n",
    "missing = is_missing[is_missing]  # only show the Trues\n",
    "missing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "stocks_cleaned = stocks[[column for column in stocks.columns if column not in missing.index]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "stock_to_predict = \"AAPL\"\n",
    "# Also skip the ones in our missing model\n",
    "X = stocks_cleaned.drop(stock_to_predict, axis=1)  # Drop the column, in a VIEW of the original data\n",
    "y = stocks_cleaned[stock_to_predict]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "split_date = \"2018-01-01\"\n",
    "X_train, X_test = X[:split_date], X[split_date:]\n",
    "y_train, y_test = y[:split_date], y[split_date:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LinearRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LinearRegression()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "model = LinearRegression()\n",
    "\n",
    "model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train_pred = model.predict(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x216bd94f4d0>]"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(y_train_pred)\n",
    "plt.plot(y_train.values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With *so much* data to use, our predictions are nearly perfect on our training data. Can't see it? Try plotting `plt.plot(y_train.values + 1)`. This near-perfectness is due to the ability of the Linear model to pick and choose the data that best fits it, and it can just keep doing this until it matches as best as it could.\n",
    "\n",
    "However good this model is on the training data, it fails on the testing data:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_test_pred = model.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x216bb848910>]"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGdCAYAAAA8F1jjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB8fklEQVR4nO3dd3yb1fX48Y+G9x6xHccjO87eiwwgCSNAWCmFlgKltBQaymppoS3Q769QKGWUkULLpqySsgOEEUIW2Xvv2E68Ejve23p+f1w9kp14SLZkPbLO+/XyS080Hl0riXR07znnmjRN0xBCCCGEMCCzrwcghBBCCNEWCVSEEEIIYVgSqAghhBDCsCRQEUIIIYRhSaAihBBCCMOSQEUIIYQQhiWBihBCCCEMSwIVIYQQQhiW1dcD6AybzUZeXh5RUVGYTCZfD0cIIYQQLtA0jYqKClJTUzGbXZsr8ctAJS8vj/T0dF8PQwghhBCdkJubS1pamkv39ctAJSoqClC/aHR0tI9HI4QQQghXlJeXk56e7vgcd4VfBir6ck90dLQEKkIIIYSfcSdtQ5JphRBCCGFYEqgIIYQQwrAkUBFCCCGEYUmgIoQQQgjDkkBFCCGEEIYlgYoQQgghDEsCFSGEEEIYlgQqQgghhDAsCVSEEEIIYVgSqAghhBDCsCRQEUIIIYRhSaAihBBCCMOSQEUIIYRoRVFFLc9/d4ic4mpfDyWgSaAihBBCnKaxycYv3tjE35bsZe7TK1i0MRdN03w9rIAkgYoQQghxmue/O8S23FIAquqbuOd/21nw9mZKq+t9O7AAJIGKEEII0czO42U8vfQAAE9cNZp7LhiC1Wzi8x0FXPCPFaw6cNLHIwwsEqgIIYQQdrUNTdz136002jQuGpnCleP6sODcgXzwq7PonxhBYXkdP3l5HQ8t3k1dY5OvhxsQJFARQggh7J74ah8HiipJjAzhoctHYjKZABiVFsvi26fz48kZALy06giXPbeafQUVvhxuQJBARQghhADWHi7mpVVHAPjb/JHERwS3uD082MpfrxjJi9dPID4imL0FFcx7bhVvrDkqibZeJIGKEEKIgFdR28BvF21D0+CaienMHprc5n3PG5bMkjtncM6QXtQ32njg41384o1NnKqSRFtvkEBFCCFEwHto8R6OnaohLS6MP10yrMP7J0WF8upPJ/LAJcMItpj5Zk8hc59eyZpDxd0w2sAigYoQQoiA9s3uQv67MReTSVX5RIZYXXqcyWTiZ9P7qUTbXhEUlNfy45fW8sRX+2hssnl51IFDAhUhhBABq6Sqnns/2AHAz6f3Y3L/BLfPMaJPDIt/PZ2rJ6SjafDstwf54b/WkFsiHW09QQIVIYQQAUnTNP744Q5OVtYxKCmS35w/pNPnCg+28rcfjOLZH40lKsTK5pxSLnpmJUt25ntwxIFJAhUhhBABadHGY3yxswCr2cRTV48hNMjS5XPOG53K53fMYFxGLBW1jfz6nS2cqKjzwGgDlwQqQgghAs7uvHLu/3gnAHedN5gRfWI8du70+HDe++VUhvaOpqFJY9m+Io+dOxBJoCKEECKgVNQ2sODtzdQ12jhnSC9uPXuAx5/DajFzwXBV4rx0T6HHzx9IJFARQgjh19xptqZpGr9/fztHTlaRGhPKUz8cg9ls8sq45th7saw8cFLa7XeBBCpCCCH81h3vbmHyX5e6vLzy2vdH+XxHAUEWEwuvHUfcad1nPWl4ajTJ0SFU1zex9nCJ156np5NARQghhF8qKq/l4615FFXU8bPXNvDkV/tosrU9u7Il5xR//XwPAH+4aChjM+K8Oj6TycSsrCQAvpXln06TQEUIIYRf+nK3+vCPCLagafDMtwf56avrKWmllf2pqnoWvLWZhiaNi0f25qdn9e2WMc7OUss/3+wpkv2AOkkCFSGEEH7pq10FAPx69iCeuno0YUEWVh44ycXPrGRzzinH/Ww2jbve20peWS39EiN4dL5zV2RvmzYwkRCrmeOlNewvrOyW5+xpJFARQgjhd8qqGxz76lwwPIUrxqbx0YJp9E+MIL+slqv/tYbXVh9B0zT++d1Bvtt3ghCrmX9eO46o0KBuG2dYsIVpAxMBWLpXln86QwIVIYQQfmfp3kIabRpDkqPolxgBwJCUKD6+bRoXjUyhoUnjz5/u5vpX1vPk1/sB+MtlIxjaO7rbx6rnqSzdI/1UOkMCFSGEEH7nS/uyj96rRBcVGsTCH4/j/kuGYTWbWHngJDYNrhqfxg8npvtiqMweqgKVzTmnWs2fEe2TQEUIA9I0jXvf384d727B1k4VgxCBqKa+ieX7TwBwwYiUM243mUzcNL0f7948hb4J4UzqF8//u2xEdw/ToXdMGMN6R6NpsGyvzKq4SwIVIQyosLyOdzfk8vHWPLJlB1YhWli+/wS1DTbS4lQA0JYJfeNZ9ttz+O/NUwgL7vo+Pl0xxz6r8q0EKm6TQEUIA9qTX+443l9Y4cORCGE8XzmWfVI6rN4xmUzdVuHTnln2LrXL95+gvtHm49H4FwlUhDCg3c0ClYNFUtIohK6hycY39uZpF7ay7GNUo/rEkBgZQmVdIxuOSpdad0igIkQ78kprfJL8tltmVIRo1drDxZTXNpIYGcw4L3eW9SSz2cSsrF6AVP+4SwIVIVrR0GTjH9/sZ8Zjy7j0uVXd3lGy+dLPAWkSJYSDXu1z3rAULF7aTNBbZtm71C7dWyhdat0ggYoQpzlYVMkPnv+ef3xzgCabxrFTNWQXd19Ca3V9I0dOVjn+fOhEZbv7lwgRKGw2ja92qWWf08uS/cGMQYkEW8xkF1dz6ERVxw8QgAQqQjjYbBqvrT7Cxc+sZNuxMqJDrSRHhwCw/XhZt41jX0EFmgYJEcGEBpmpa7SRK5U/QrAlt5SiijqiQqycNSDR18NxW0SIlSkDEgBYKpsUukwCFSFQuSjXv7KeP3+6m7pGGzMGJfLVXWdz/jCVrLfjWGm3jUXPTxmWGs2AXpEAHJCEWiEcyz6zhiYRbPXPjy+9THmplCm7zOrrAQjhTdtyS3ll9RGiQq0kR4WSHBNKcnQoKdGhJEeHEBMWxMdb87j/451U1DYSGmTmjxcN5SdTMjGZTIxMiwFg+7Hum1HZ0yxQKSyrZVdeOfsLKzhvmP9NdQvhKZqmNetG6z/VPqc7d0gSsItN2acora4nNjzY10MyPAlURI/2+Ff7WHngZJu3B1vM1DepngZj0mN58oej6W+fxQAYZQ9Udh4vw2bTMHdD8t6efFXlM6x3NNH2zdOkRFkEun2FFWQXVxNiNXP24F6+Hk6npceHMyQ5in2FFSzff4LLxvTx9ZAMTwIV0WM1NtnYlK22er9+aia1DU0UltdRWF5LYXktp6obqG+yYTWbuGP2IG49ZwBWS8vp5IG9IgkNMlNV38Thk1UMTIps7ak8xmbTnDMqvaMJC1LdNKVEWQS6JTvVbMqMQb2ICPHvj67ZQ5PYV1jBN3uKJFBxgX//bQvRjt355VTXNxEdauXP84afMRtS29DEiYo6IkKsxEe0Pv1qtZgZnhrDpuxT7Dhe6vVAJaekmur6JoKtZvolRhBkD5wOFqnKH38rxxTCU77042qf080emsQ/vzvE8n1FNDTZHP/PRevk1RE91oajajZlQt/4VpdsQoMspMeHtxmk6Eb26b48FX02ZUhyFFaLmfT4cEKsqvLn2Cmp/BGBKae4mj355VjMJuYM9f9AZUx6HPERwZTXNjpmfUXbJFARPdaGI6pN9YS+Xeteqeep7OiGQGV3s2UfAIvZ5Kz8kcZvIkDpSbST+8UT18EXC39gMZs4Z4jepVbKlDsigYrokTRNc+ynMalvfJfONSotFoCdeWU0Nnl3MzF9RmVo7yjHdYOSVaCyv0jyVERg0gMVf9rbpyP6zNDi7fnUNTb5eDTGJoGK6JGOnKyiuKqeYKvZUWLcWf0TI4gItlDbYOPgCe/OauzO0wMV59b1g+x5MQdlRkUEoKKKWjblqOURva9RTzArK4mU6FDyy2p5e12Or4djaBKoiB5Jn00ZkxZLiNXSpXOZzSZGdEOeSml1PXlltQAMTW0WqCSr2RWZURGB6OvdhWgajE6PJSUm1NfD8ZjQIAt3zBkEwHPfHqSyrtHHIzIuCVREj7T+iPoGNrGfZ3ZX7Y48Fb1/SlpcmKN/CjSbUSmqxCZ7/ogAs8zewbUnVPuc7qrxafRPjKC4qp6XVx7x9XAMSwIV0SNtzNYTabuWn6Ibac9T8eaeP6cn0uoy4sMJtpqpbbBxvLTGa88vhNE02TTW2ZPipw/0v719OmK1mPnN+UMAeHHlYYor63w8ImOSQEX0OEXltWQXV2MywfhMD82o2Jd+9uSXU9/onYRaZyJty0DFajHTPzECkMZvIrDsyS+noraRyBDrGQF8TzF3RAoj+8RQWdfIP7875OvhGJIEKqLHWW/PTxmaEt1iCaUrMhPCiQq1Ut9o81qw0FagAjDYnqcimxOKQLKuWYuB07tG9xRms4l7LlCzKv9Zky2zpq3omX/zIqBttDd6m9jF/inNmUwmZ56KF5Z/Gppsjj4pw1PPDFT0PBWZURGBZN3hYgAm90vw8Ui8a8agRKb2T6C+ycY/vt7v6+EYjgQqosdZb/8WNrGfZ/JTdHo/FW9U/hw6UUl9k42oECtpcWFn3K5X/sjmhCJQ2GyaY3Z0cn/P/l82GpPJxO8uVLMq728+xkGp8GtBAhXRo5TXNrC3QC2hTPRQIq1ulKNEudSj5wXnsk9W7yhMpjPb/etN3w4USuVPT1XX2MT2Y6Vomvz9girHL61uIDzY4tjGoicbmxHHBcOTsWnw+Jcyq9KcBCqiR9mcfQqbpiplkqM923NBbxy3r6CC2gbPdpLUG721lTCYGR9OsMVMTUOTrGH3UE9+vZ9Ln1vNB5uP+3oohrDusJpNGZ8ZFzCb9v32/CGYTbBkVwFbc0t9PRzDCIy/fREw9EZvnp5NAegTG0Z8RDCNNo29BZ6dmtV7qLSWSAv2yp9eqvLngEwL90hL96h+Id/I3i8ArDui8lOm9O/Z+SnNDUqOYv64NAD+9sVemV2zk0BF9CgbvJBIqzOZTI4p6B0eXP7RNM3ZQ6WVRFrdwCTZnLCnKqmqd+QfbThaEvAfUJqmOWZUJns418zo7jxvMMEWM2sOF7Pq4ElfD8cQJFARPUZdY5NjutTTibQ6vfLHkwm1RRV1lFTVYzY5y5Bbo9+2XwKVHmdT9inH8cnKeo6crPLhaHzvYFElxVX1hAaZHUnsgaJPbBg/mZIJwGNL9klOGhKoiB5kx7Ey6httJEQEOxqkeZpjRsWFEmWbTWNPfnmH34712ZT+vSIJDWp7XyJnK31Z+ulpNtqXLHV65VqgWmv//cdlxBFsDbyPqQXnDiAi2MKO42V8sbPA18PxucD7FyB6LH3ZZ0LfuFYrZzxhdHosoPqZ1NS3n1D7yBd7mPv0Sp74qv0M/o4SaXWDmjV9C/SlgZ5Gz61Kj1el6euPBnagEij9U9qSEBnCz2f0B+DlVYd9PBrfk0BF9BjeTKTVJUeHkhQVgk2D3fltz6rsK6jgldVHAXh++SFH+XFr2utI21xmQjhBFhPV9VL505PUNjQ5Zuh+OXMA4Py3HIg0zbm/T0/vn9Ken0zJxGo2sTmnlH0eTt73N24HKitWrGDevHmkpqZiMpn46KOPWtxeWFjIT3/6U1JTUwkPD+fCCy/kwIEDLe5TW1vLggULSEhIIDIykvnz51NYKJnuovNsNs0xfT7Jy8l3HeWpaJrGg5/spMmmEWwx02TTuO+DHTS1sda8x4VEWoAgi5n+ifaEWmn81mNsyy2loUkjOTqEy8akYjZBbkkN+WWBGYweOVnFiYo6gq1mxthnMANRr6gQ5gxVO0a/sz7Hx6PxLbcDlaqqKkaPHs3ChQvPuE3TNC6//HIOHz7Mxx9/zJYtW8jMzGTOnDlUVTmTw+666y4+/fRTFi1axPLly8nLy+PKK6/s2m8iAtr+ogrKaxsJD7Z4ffOykX1iAZUT05rPduSz9nAJIVYz79w8mcgQK1tzS3lrXfYZ962pb3IkTg7t3XYirW6go/FbYH/D6kk2ZutLlvFEhQY5AtZAzVPRZ1PGpMe2m7MVCK6ZlA7Ah1uOe7x3kz9xO1CZO3cuDz30EFdcccUZtx04cIC1a9fy/PPPM3HiRIYMGcLzzz9PTU0N77zzDgBlZWW8/PLLPPnkk8yaNYvx48fz6quv8v3337N27dqu/0YiIG1olnzn7c3L9BmVba2UKFfXN/LwZ3sAuPWcAYzPjOf39tbYjy3ZR0FZbYv77yuswKZBYmQwSVEdN6gbnGTPU5HKnx7DsWRp3+lbX7oM1OUfPT9lSoCVJbdmxqBe9IkNo6ymgSUBnFTr0Xf0uro6AEJDnW+4ZrOZkJAQVq1aBcCmTZtoaGhgzpw5jvtkZWWRkZHBmjVr2jxveXl5ix8hmnP2T/H+m9sIe+XP4ZNVVNQ2tLjtn8sOkV9WS1pcGLecrfINrp2cydiMWCrrGnnwk50t7u9qfopOb6W/X5Z+eoQmm8amo84ZFXD2Ddlw5FSbj+upWuanBGYibXMWs4mrJ6pZlUBe/vFooKIHHPfddx+nTp2ivr6ev/3tbxw7doz8/HwACgoKCA4OJjY2tsVjk5OTKShoPWJ85JFHiImJcfykp6d7ctjCz2ma1iyR1vON3k7XKyqE1JhQNA125TmD5uziKv69QmXo/+niYY5pa7PZxCNXjsRqNvHlrkK+2uX8d+5qxY/OUaJcWCGVPz3AvoIKKuoaiQyxkpWiZsv0gGVfYQWl1fW+HF63U7k5tQRZTIzL8P7/ZX9w1YQ0zCa1JHboRGB+QfFooBIUFMQHH3zA/v37iY+PJzw8nGXLljF37lzM5s4/1X333UdZWZnjJzc314OjFv7u2Cn15mY1mxiTEdstz6k3oWqep/KXxbupb7IxY1AiFwxPbnH/rJRofjFTlRs++MkuKusaAfdnVPomRmA1m6iqbyLvtGUk4X82ZqsAe2xGrGPJMjEyxLFdgj5TGCjW2pd9RqXFEhYc2Pkput4xYZw7JAmA/24IzM8+jy/mjx8/nq1bt1JaWkp+fj5LliyhuLiY/v3Vm3RKSgr19fWUlpa2eFxhYSEpKSmtnjMkJITo6OgWP0Lo9Df74X1iCA+2dstz6hsUbreXlS7bV8Q3e4qwmk08OG94q31c7pg9iIz4cPLLann8y32OhnDQccWPLshipp+9mZ0k1Pq/tpYsHcs/AZansvaI3j9F8lOau2ZSBgDvbzpGfaPNx6Ppfl7LOoyJiaFXr14cOHCAjRs3ctlllwEqkAkKCmLp0qWO++7bt4+cnBymTp3qreGIHmy9fS1/Ujcs++j0hNodx0qpa2zi/326G4Abp/V17MlzutAgCw9fMQKA19ccZfGOfKrqmwi2mt3qpKu30peEWv+maZojCXzCaf929cAl0Cp/HPv7SH5KC+cO6UVydAjFVfV8vTvwWnm4HahUVlaydetWtm7dCsCRI0fYunUrOTkq0WfRokV89913jhLl8847j8svv5zzzz8fUAHMTTfdxN13382yZcvYtGkTN954I1OnTmXKlCme+81EwOiORm+n01vpHy2u5h/fHODIySp6RYVw++xB7T5uxqBeXDG2D5oGv/vfNgCGJEe5Vank2JxQWun7teOlNRSU25csT+sXov9b3nm8jOr6Rh+MrvsdO1XN8dIaLGYT4zMlP6U5q8XMVeMDN6nW7UBl48aNjB07lrFjxwJw9913M3bsWB544AEA8vPzue6668jKyuL222/nuuuuc5Qm65566ikuueQS5s+fz8yZM0lJSeGDDz7wwK8jAk3zXWcndGOgEhseTEZ8OADPf3cIgHsvzCIqNKjDx/7p4qHEhgdR26CmcF3pn9Lc4Gat9IX/2mhf9mltyTItLozeMaE02jS25JT6YHTdT59NGdEnhsiQ7lnC9SdXT0zHZIJVB0+SU1zt6+F0K7cDlXPOOQdN0874ee211wC4/fbbyc3Npb6+nuzsbP7yl78QHBzc4hyhoaEsXLiQkpISqqqq+OCDD9rMTxGiLZqm8cHmY4CaZYiPCO7gEZ6l56kAjMuI5YqxfVx6XEJkCH+4aKjjz64m0ur0EuWDhbLnjz87vX9KcyaTydFhOVCWf9Ydkf4p7UmPD2f6wEQA/rsxsGZVZK8f4ZdOVtZx65ubecjeXO30KpvuMMq+/GMywf+7bARms+sbIV41Po1ZWUlYzSZmDOrl1vP2TVCVPxV1jRSUS+WPv9p4Wv+U0wVa4zfZ36djP7In1S7aeIzGpq4l1frTlxwJVITfWbw9j/OfWsGSXQVYzSbunDOIO+cM7vZxzB3Rm5ToUH49a5CjCZyrTCYTL14/gU33n9dm8m1bgq1m+tqTb/dLQq1fKqtuYJ+9auv0RFqdPqOyOedUj6/0KCirJbu4GrOpe5dw/c2cockkRARTVFHHt3uLOn2e2oYm5j69kgVvb/bg6LxHAhXhN4or61jw1mZue3sLJVX1ZKVE8fFt07hzzmCCvNw2vzUZCeGs/cNs7j6vc0GSxWwiJqzjnJbWDJY9f/zaphw1e9A/MYLEyJBW7zOwV6Qjl2lnXts7dfcE+rLP8NQYol3I8wpUwVYzPxifBnQtqXZ3fjl7Cyr4bHu+o6eTkUmgIvzCFzvyOf+pFXy2Ix+L2cTtswfxyW3TGZ7q3kxGTzFQ9vzxaxscyz5tV7eYzSbn8k8Pz1NZq5clS35Kh/SW+sv3nyCvtHM7bB896dwkeF+B8b/sSKAiDE3TNH7z3jZufWszxfosyoJp3H3eYIKtgfvPV2+lv19KlP3SxqN6/5T2P5gnBUieir4RofRP6Vj/XpFM6R+PTYP3NnauU23zQGVvgfH3zgvcd3rhFzZmn+L9zcewmE3cdu5APr5tmtv5ID3RgF4qUGn+hiP8Q21DE9ty1VJOR71/Jjo61J7CZvOf5Ed3FJXXcvhkFSaTMzAT7dOTat/bkEtTJ/5dHG1W3rw33/hfdiRQEYa2195i/pzBvfjtBUMIscr+H6DyYwBOVTdQftoOzsLYdh4vo77JRmJkMH3tf49tGZ4aTViQhbKahh47e7bePluUlRJNTLjkp7jiguEpxIYHkVdWy+qDJ91+/NFi5xccfRsPI5NARRiaXtUyMNm9ypieLjLESmKk6hsTaM2f/J0jPyUzvtU9oZoLspgdXVp7ap6KniMxJl1mSl0VGmRhVpbaqHBrbqlbj9U0jSMtln6MvxO7BCrC0PQ28YOT3OveGgj0zrjZEqj4FWd+imtt4h37/vTQnZT1ZYi+Ca7vdyWcHaoPutmhuqSqnopaVekTZDFRWdfIsVOdS8rtLhKoCEPTq1r0/5TCKdP+xp5dInkq/sJm09iY3fqOyW2Z2M85o2L0b76dkW1fhsiUQMUtep7aoRPuBSp6YJgaE+qoHtxr8MofCVSEYRVX1lFcVQ/AgCR5EzudPqMiSz/+40BRJWU1DYQFWRiW6trWCWPT4wiymCgorzX8N9/O0BPC+ya2n68jWhrQS70nHj5R5VaitfP1jmBoigpUjJ6nIoGKMCx90730+LAzNm0TkJkgSz/+Ri8zHpsR63KTwrBgi2O37nU9LE+ltLqecvsyhB54C9dkxIcTZDFR09BEXpnrAezRZjNY+j5jRi9RlkBFGJbedVXyU1qnByo5JRKo+AtX+6eczlGm3MMCFX0ZIjk6RL6MuMlqMTvyeg6dcH35V3/N+yWGk2Xfud3oJcoSqAjD0it+Bkl+Sqsy4tWbVF5ZDXWNTT4ejXCFXvEz0cVEWl1Pbfwm+Sldo+epuJNQ61j6SYggK0XNqBwprqKm3rjvIRKoCMPab59RGeTmpn2BIjEymPBgC5pGj8xd6GnySms4XlqD2QRjM9wLVFQpMxw+WUVRRc/ZMfvoSb3iR5Z9OkPf0NTVhFpN01rkqPSKCiExMhhNc77fGpEEKsKw9G8JUvHTOpPJFHAJtZqm8fQ3B3h26QFfD8Vt+sZ7w1KjiQxxb5kjJjyIEfZ9rT7ZmufxsfmKzKh0jV5kcMjFGZWSqnoq6hoxmZw5QXqeipETaiVQEYakV/yYTM5vDeJMzoTawChR3ldYwVPf7OeJr/f73e+8aOMxAM4dktSpx187WbVNf3X1URqbbB4bly/piZ3SQ6VzBvZSX+JcnVHRX+/UmDBCg1SX76wU45coS6AiDEnPT0mLCyMsWNrmt8XZSyUwZlQ+31HgOF55wP3W4b5y+EQl3x8qxmRy7n7rrsvH9iEuPIjjpTV8s6fQwyP0Db1iLVOWfjqlv71E+WRlPaXV9R3e/8jJM19vPU9FZlSEcNNB6UjrkkBb+vliR77jeOWBEz4ciXveWZ8DqD2r0uI696EcGmTh2smZALy86ojHxuYrFbUNjj5JEqh0TkSIld4xoYBrlT/N81N0jsofA7fSl0BFGJJU/LjGsfQTADMqBworHL11AL4/WOwXSyC1DU38b5Na9tEDjc66bmomQRYTG46eYvuxUg+Mznf02ZSEiGCiQmUzws5yJNS6kKeiL/30a7bUNjApEqvZRFlNA/llxkzUlkBFGJJU/Lgm016inFNS7VZ3Sn/0xU617HP24F7EhAVRUdfItmNlPh5Vx5bsLOBUdQO9Y0I5Z0ivLp0rOTqUS0alAipXxZ/Jso9nuNNK39nszfmah1gtjnMYtfGbBCrCkA5IxY9LUmNDsZpN1DfaKHSjbDW3pJoXlh/ivY25rDlUzLFT1TQZPND53L7sc8mo3kwfmAj4x/LP2+vUss81EzOwutiNtj0/m9YPgMXb8ygsN+Y3YFdIIq1n6K30OwpUVGmy3uyt5WuuL//sMWjjN2kFKAynuLKOEqn4cYnVYqZPXBjZxdVkF1fTOybMpcf9ZfFuvtrdMiHTajaRGhtGWlwY6XHhTOoXz/zxad4YttsOn6hkb0EFVrOJ84Yl02TT+GxHPisPnOTOOYN9Pbw27S+sYP3REixmU6eTaE83Mi2GiX3j2HD0FG+uzeY35w/xyHm7m5Qme8aAJNeavhVX1VNpL01OP227gqyUaD4mz7CVPzKjIgxHKn7c425CraZpbM4pBdSeM30T1J4hjTaNnJJqvj9UzH835vKbRds4ctIYJcD6ss9ZAxOJDQ9m+iA1o7I1t5Ty2gZfDq1d+mzK7KwkUuxJj56gz6q8tS6H2gbjdhRtj97KXTYj7JqB9mWbnJLqdjtU64m0zUuTdc5W+sZc+pEZFWE4B6Tixy2ZCeGsPADZJa4FFYXldZysrMNsgrd/PoWwYAtNNo2iilpyS2rILanmia/2kVdWy9HiqjOmiX1BX/a5eGQKAGlx4fRPjODwySrWHCrmguEpvhxeq2rqm3h/sz2JdkrXkmhPd96wZPrEhnG8tIaPthznmkkZHj1/d5AZFc/oFRVCVIiVirpGjp6sZkhK6++bR9rZpXqovUT58MkqahuazghkfE1mVIThHJCKH7foCbWu7qK887hKQB2UFOWYsbKYTfSOCXMs9+jdKvNLfZ8DkV1cxa68cixmE+cNcwYkMwYZO09l8fY8KmobSY8PY4Y9p8ZTrBYzN07rC8Arq48Ytqy0LdX1jRSW1wHSPr+rTCaTY/mnvTwV/f2htZyg5OgQ4sKDaLJpbu0b1F0kUBGGo1f8DE6W/BRXZLi5i/IOe6Ayok9Mm/fpHauWKfJKfb+HkL7sM7V/AvERwY7rZwxSFTRGbfz2ln3Z50eTMjCbTR4//w8nphMRbGF/YSWrDxZ7/PzepP9bjQkLIjY8uIN7i444Kn/aCTKO6KXJrcyQmkwmQzd+k0BFGI5e8TNIln5c4myj796Myog+0W3eR0/KzSszQKBiX/aZO7Ll8s6UAQlYzSZ7IrExcml0u/LK2JpbitVs4qrxnkmiPV10aBBXTVDnfmW1fzWAk80IPUvf8+dgOzMqeo5KW0ttzRu/GY0EKsJQTkrFj9v0ZNqymgbKqjtOLN2ZpwKVke3MqPSJVYGKr5d+jp2qZtuxMswmOH9Yy0AlMsTKuEy1C7HRZlX0JNoLRqTQKyrEa89zw1l9MZng271FHHZxvxcjyLHnU2VIfopHDOygl0rzXZP7tZG8PFRmVIRwjZ6fkh4XLhU/LgoPtjo+DDtKqC2qqKWwvA6Tyblramv0tty+nlH5wr63z6R+8a1+4Ou5H6sMFKhU1jXy0ZbjgHMjQW/plxjB7Cy1yeFr3x/16nN5kqPiR2ZUPMKRo1JU1Wrjx5OV9VTVN7Vamqxrvouy0XKeJFARhqJX/EhHWvdk2t98jnaw/LPruPq2NKBXJBEhbRf9peozKmW1Pn3T+nynWva5aGTvVm+fMVjlqaw+dNIw7fQ/2ZpHVX0T/RMjmNo/wevP97PpqlR50cZjLs2oGYFU/HhWRrxqMVDT0ER+K00Am++aHGJt/QvgoORIzCY4Vd3AiYo6r47XXRKoCENxtM6Xih+3OBJqO8jV0BNp21v2AdWq3WSC+kabY+O47pZXWsOWnFJMJriwjfLjkX1iVDv9WmO009c0jbfWZQPw48kZmEyeT6I93dT+CWSlRFHT0MS7G3K8/nyeIDkqnhVkMTuCvtYSao+cbDuRVhcaZHHcvsdgeSoSqAhD0Zd+pOLHPa6WKOuByvDUtpd9AIKtZnpFqqUWX+WpLLFX+0zMjCcpuvVmaRazyVDt9LcfK2NXXjnBVjPzx3VPV1+TyeSYVXlp1RGOnTL2BpV1jU2OJUWZUfEcvZV+a+XF+gxWR831suzLP0Zr/CaBijAUqfjpHFd3Ud7l4owKQG/78s9xD5co55ZU85fFu9md1/6b4Rc7W6/2Od10Rz8V3+ep6LMpF4/sTVxE95XdXjo6lX6JEZyoqOPqf601XBVUc7klNWgaRARbSIyU0mRPGdhOLxXnDFb7geHQFH3PHwlUhGiVVPx0nnPpp+1Apbiyjjz7Nu7DXQhU+th7qeR7OKH2z5/s4uVVR7h84WpeWnm41eS/wvJaNmafAuDCER0EKgON0U6/qKKWT7ep4MrbSbSnCw2y8PYvJtM/MYLjpTX88F9rXNpN1xea56d0x9JYoGhvF2VHV9qOAhV9RkWWfoRonZ6fIhU/7tOTaQvKa9vc+2WnfQajf2IEke0k0ur0Xir5ZZ5b+imtrmeFfYmmvsnGQ5/t4YZX11N0WgLgl7sK0DQYlxHb4UaL6fGqnX6TTWPNId80PqtvtLHgrc3UNDQxok804+1l092pd0wY7/5yCoOTIyksVzMr+wz2gQOyx4+36IHKwaKWs2mapjVb+mk/UNGXfg4WVVLfaIzkdJBARRiIvrYq+Snui48IdgQfuW0s/+x0oSNtc3qJsieXfpbsLKChSSMrJYqHLh9BaJCZlQdOcuHTK/mm2W7On21vv9rndL5up//wZ7vZcPQUUSFWnrlmrM9mCpKiQnn35qkM6x3Nyco6rvn3Gsffu1FIxY936CXKJyvrWlR/naiso6q+CbMJ0uPbD/pTY0KJCrXSaNMMNSMngYowDH1GZaDkp7jNZDI5Gr+1lVC741jHHWmbczZ981yg8sm2PAAuHZPKT6ZksvjX0xnaO5qSqnp+/sZG/vTRDnJLqll/tAToeNlH58t2+v/bdIzX16jclH9cM4b+vXwbaMdHBPPOL6YwOi2GU9UN/PjFtWzJOeXTMTWXLT1UvCIyxEqKPen80ElnkKHnp6TGtl2arDOZTIZs/CaBijCM/VLx0yUdJdTqHWldnlGJ9ezST1F5LWsOq6WZeaNSARWUfrTgLH5ur1p5c20Oc59eiabB6PRY0uJc+zBr3k6/vTwdT9txrIw/fLgDgDtmD2L20ORue+72xIQH8ebPJzMhM47y2kaue3k9G+zBn6/pMyoZ8TKj4mmOVvrNKn+OtrPHT2uGGrCVvgQqwjCcSz8yo9IZ7fVSOVVVz7FTamZkeKprgUqqfemnsLzWI83UPtuRj6bB2IzYFt0xQ6wW/nTJMN742SR6RYVQWdcIwEUuzqaAvZ1+hr2d/sGuLf+42uCuuLKOW97cRH2jjdlZSdwxe1CXntfTokKDeP1nk5jaP4HKukauf3k96w77dvPChiab49+h5Kh4Xmut9J17/Lj2emf1Nt6MSscZdUJ0g+YVPwN8PHXurxy9VFqZUdllT6TNTAgnJizIpfMlRoYQZDHR0KRRWFHnWArqrE/1ZZ/Rqa3ePnNwL5bcMYP7P97J7rxyrhjbx63zzxiUyPqjJazcf5JrJ2e2ep+GJhtbc0vJK62hqLyOoopaiirqWhyjwTWT0rl55oA29+lpbLLx63e2cLy0hn6JETx59Riv7JDcVREhVl69cSI3/2cTK/af4C+f7Wbxr2f4bDx5pTU02jRCrGaSo1rvjSM6r3krfZ0+o9JRxY8uK8V4MyoSqAhDkIqfrstsp0R5h5uJtABms4mUmFByS2rIL63pUqCSW1LNZnuX2YvbSZBNiAzhn9eO79RzzBjciye+3u9op2+1OCeMD5+o5L8bc3l/03FOVnbcHvzFlUf4z9psrp2cyS/P7k/SaR+qf1uyl+8PFRMebOFf1413OfjzhdAgC49fNYpJDy9lV145ZTUNPhuvXvGTmRBuyMDO37U2o3LEnqPi6tLP4OQoTCY4UVHHyco6EiO9t6mmqyRQEYYgHWm7Tk+mzT1VTZNNw9Lsg2CnG43emusdE0ZuSQ3HS2uY0IWxLbZX8Uzpl9Bml9mu0tvpl9U0sO1YGUN7R/H5jgLe25DrSM4FlWw6KCmSpOhQkqJCSI4OISlKHSdFh5BbUsPTSw+wNbeUl1cd4U17wHLL2f1Jig7lk215vLjyCACPXzXaL5Yqk6JC6Z8YweGTVWzKLmFWlm9yaaTix7v0GZWckmrqGpsItpjdfs0jQqxkxodztLiavfkVTB8kgYoQgHMzQqn46bzU2DDHUk1+WU2LRFRHIq2L+Sm6Ph5KqP20WbWPt1jMJqYNTODzHQX86aOd5JZUO/JdzCY4e3Avrp6YzqysZIKtbafnDUyK4pwhvVhx4CT/+GY/W3JKeWX1Ed5al82V4/rw0Rb1u9xy9gCXy6eNYFK/eA6frGLdEd8FKrLHj3clRYUQGWKlsq6R7OJqYsOCqLaXJme0sWtya4b2jlaBSkG5o/OzL0kyrTAEqfjpOovZ5AhOmi//lNU0OEpCXS1N1um9VLpSonywqJLd+eVYzaY2Nxf0FL1MeU9+OZV1jWTEh/Pb8wfz/b2zefXGSVw4one7QYrOZDJx9uBefHDrWbzxs0mMz4yjrtHGO+tzqWloYsagRO65YIhXfxdPm9QvHoD1R3xX/SMzKt5lMpma5alUOjrS9okLc+nfvS7LUaJsjDwVmVERPqdpGgfsOSr+MI1uZBnx4Rw5WUV2STVn2a/bZZ9NSYsLIzbcvb1VnPv9dH5GRZ9NmTm4l9f3v7lkVG+W7ikiKtTKVRPSmNIvoUu5ECaTiZmDezFjUCKrDxbzz+8O0tBk45lrxrZYWvMHeqCy41gZ1fWNhAd3/9u/u4mdwn0DekWwLbeUQycqqahVXzTcfb2z7CXKeu6gr0mgInyuuKqeU9UNUvHjAY5eKs1mVDqbnwLOEuXO7vejaZojUJk32vvLJFGhQbx0Q1eyaVpnMpmYPijRENPgnZUWF06f2DCOl9awObu023+XJptGbom+a7Is/XiLs5V+JVX1ajsNdwOVqQMS+Oz26YbZc02WfoTPScWP5+jr0DklzvLEHcdVabI7FT+61C7mqOzKK+fwySpCrGbOG+bdZR/RMefyT/f3Uykor6W+yUaQxeT4dyU8z7mLcpWjh0pHe/ycLjo0iOGpMR12su0uEqgIn5OKH8/R1/6bz6js6kRpsi7VviFgSVU9NfWtb3bYHn02ZfbQJJc2QhTepQcq63yQp5Jt/9BMjwv3u2Uzf9J8F2U9R6WfnzfXk0BF+Jw+ozJI8lO6rHkvFU3TqKht4LD9zaozSz/RYVbC7bNc7i7/2Gyaoyy5rSZvonvpgcqW3FLqGt0PPLuieQ8V4T2ZCeFYzSaq65sc763+nrwsgYrwuQP21vmDDLIe6s/0pZ+KukZOVTew296Rtk9sGPGdSGQ1mUydXv7ZnHOK46U1RIZYOWdIktvPLTyvf2IEiZHB1Dfa2H6se3dVloqf7hFkMTuCQZumSvPTXdwzy6gkUBE+JRU/nhUaZCE5WjVoyi6ucnSkHZ7qXllyc3qJ8nE3S5T1ZZ/zhycTGmSMte5AZzKZfFam7Kz48e8PTX/QvCghLS7crdJkI/Lv0Qu/l1NSzanqBoIsJsNkmPs7fc+fnJLqLlX86PQ8lXw3SpQbm2x8tkMt+8yTZR9DmdTXN3kqet5UppuJncJ9zd9Le8JSmwQqwqc2Hj0FqERP+dbtGRnNSpR35nW+4kfnXPpxfUZl7eESTlbWExcexPSB/lvS2xNN6pcAwKajJR7ZFRvUXk56hUlrNE2THirdqPmMiqt7/BiZpOELn9qYrQKVCZlxPh5Jz5Fpz1PZW1Du2JysK4FK71j3l34+2XYcgLkjexNkke9DRjIkJYroUCvltY3szi9nVFpsp8+1O6+chd8d5PMd+VhMJp778TguHHFmGXpRRR21DTYsZlOXd+EWHRvQbEalJwSG8g4ifGpTtpp+Hp8Z7+OR9Bz6jMqyvSfQNEiJDqVXVOc3FnMs/biYTFvX2MSSnQUAzBslyz5GYzGbmNi3a3kqW3JO8fPXN3DRMyv5bHs+mgaNNo3b3t7Mkp35Z9xfX/bpE+teK3fROQN6OYOTvn5emgwSqAgfKqtucOzxM15mVDxGr6qoaVDlp+7u73O61Fjnfj+apnV4/9UHT1Je20hydIgjcVMYS2f6qWiaxppDxVz70lqu+Of3fLOnCJNJ5SAt/vV0Lh+Tag9WtvDFjpbBylFHxY//f2j6g6jQIAYnR2I1mxjWu/OzqUYhSz/CZzbnqGWfvgnhXfrGL1rKPG2X1K4s+wD0ts+oVNU3UV7TSEx4ULv3X3dYffjNykqSxl4GpQcqG46WYLNpHe6HtCuvjAc+3sUm+1Kt1WziirF9uPWcAfS350M88cMxmEwmPtxynNve2cKz4NhdOlvyU7rdmz+fTGl1Ayn2qj1/JoGK8JmNsuzjFbHhQUSFWqmobQS6VvEDEBZsIS48iFPVDeSV1XQYqOgBqPy9GteIPjGEBVkorW7gQFElQ1Labg1Q29DEzW9s4nhpDcFWM1dPSOeXZ/d37NSts5hNPH7VaEzAB1uO8+t3tqBpcPGo3t5t9rb/SzixF6beBmZJyNclRYWSFOX/QQpIoCJ8SK/4mdhXln08yWQykZkQzs4u7PFzutTYME5VN5BfVsPQ3m0vJdU32thmbyQ2LiO2y88rvCPIYmZ8ZhyrDp5k/ZHidgOV174/yvHSGnrHhPLxgmkkRbf94Wcxm/j7VaMxmUy8v/kYt7+7BZumea/ZW2kuvHc9NNZCaCyMv8Gz5xeGIDkqwifqG21szS0FYIIEKh6n91LpFRVCcjsfLK7Sl3+Od9BLZVdeGfWNNuLCg3pEWWRP5kqeSklVPQu/PQjAb88f0m6QorOYTTz2g1H8YHwaTTaNO/+7lX0Fqqmjx5u9ffuQClIAlj0MdZWePb8wBAlUhE/syiujrtFGbHgQ/ROl0Zun6ZU/XV320TVPqG3P5pxSQCVHm0ySn2JkzTvUtpUk/czSA1TUNTKsdzRXjO3j8rktZhN/mz+Kq+zBSkOThskE6fEeDFTytsD2d9VxRBJUFsKa5zx3fmEYEqgIn9CT8sZnxHWYyCfcN29UKqPSYvjJlAyPnM/V/X422/9ex2bILJnRjUmPJdhipqiirsVu27ojJ6t4c202AH+4aKjb/0/1YOWHE9IAleTtsaaOmgZf3a+OR10NFz2mjlc/DRUFnnkOYRiSoyJ8Qs9PGS/LPl4xLDWaT26b7rHz6fv95HUwo+IIQKXc3PBCgyyMTo9hw9FTrD9SQt/TluoeW7KXRpvGOUN6MX1Q57oLm80mHr1yFJP6JXh209F9X8DRlWAJgVn3Q0wapE2EYxvUEtClz3ruuYTPyYyK6HaapjXrSCuVIf5An1HJa6eNfl5pDQXltVjMJkal+X/vhkDQVp7KpuwSvthZgNkE980d2qXnMJtN/GB8GqPTY7t0HoemBvj6AXU89VcQmw4mE5z/sLpuy5tQuNszzyUMQQIV0e1ySqo5WVlHkEU+0PyFPqNSUFaLzdZ6PoM+mzKsdzThwTJZ6w/0fX/WHy12XKdpGg9/tgeAq8ant1sR5BObXoPiAxCeCNPvdl6fMRmGXgqazRnIiB5BAhXR7WQjQv+THB2K2QQNTRonq+pavY8s+/if8ZlxmE2QW1LjWNb7YmcBm3NKCQuycPf5g308wtPUlsF3j6jjc+6F0NNK5ef8GcxWOPg1HFrW7cMT3iGBiuh2shGh/wmymB3No/LaKFHekqMn0sZ217BEF0WGWB19djYcLaG+0cbfluwF4Bcz+3uktN2jVj0F1cWQOBjG//TM2xMGwMSfq+Ov7gdbU7cOT3iHBCqi2+kbEU7oK/kp/qR3OyXKNfVN7MpTDeZkRsW/TOrrzFN5a1022cXVJEaG8MuZ/X08stOU5sCaf6rj8/4fWNrokDzzdxASA4U7YPt/u298wmvcDlRWrFjBvHnzSE1NxWQy8dFHH7W4vbKykttuu420tDTCwsIYNmwYL7zwQov71NbWsmDBAhISEoiMjGT+/PkUFhZ26RcR/qG0ul42IvRTzoTaM2dUth8rpdGmkRwdQh/7/YR/mNxf5ams2H+Cp5ceAODu8wYTEWKwPKOlf4GmOug7AwZf2Pb9IhJghj135duHoP7M0mvhX9wOVKqqqhg9ejQLFy5s9fa7776bJUuW8Oabb7Jnzx7uvPNObrvtNj755BPHfe666y4+/fRTFi1axPLly8nLy+PKK6/s/G8h/Ia+D0y/xAgSI2UjQn+S2k6Jst7obVyGNHrzN/oWFsdO1VBa3cDApEhH7xPDOL4Zdrynjs9/SFX5tGfyLRCTDuXHYe0/vT8+4VVuBypz587loYce4oorrmj19u+//54bbriBc845h759+3LzzTczevRo1q9fD0BZWRkvv/wyTz75JLNmzWL8+PG8+uqrfP/996xdu7Zrv40wPEf/FJlN8Tt6G/38VkqUJZHWf8WGB5PVrLLnvrlZWC0GygrQNPjqT+p41DWQOqbjxwSFwuwH1fGqf0DlCW+NTnQDj/9rPOuss/jkk084fvw4mqaxbNky9u/fz/nnnw/Apk2baGhoYM6cOY7HZGVlkZGRwZo1a1o9Z11dHeXl5S1+hH+SRFr/5Vj6OS2ZVtM0RyLtOPl79UtT7Ms/U/rHMysrycejOc2+zyF7NVhDYfb9rj9uxHzoPQbqK5yVQsIveTxQefbZZxk2bBhpaWkEBwdz4YUXsnDhQmbOnAlAQUEBwcHBxMbGtnhccnIyBQWttz5+5JFHiImJcfykp6d7etiiG9Q32tgmGxH6LX2/n9OXfrKLqymuqifYYmZ4ats7Kwvj+tW5A1hw7gCeunqM8Zbu1j6vLqfcqjrQuspsVstEAJtehbytHh+a6B5eCVTWrl3LJ598wqZNm3jiiSdYsGAB33zzTafPed9991FWVub4yc3N9eCIRXeRjQj9m770c6KyjvpGm+N6fdlnZFoMIVbpi+OPkqJCueeCLMffsWFUFUP29+q4tXLkjvSboWZWNBt8ejs0NXp0eKJ7eDStu6amhj/84Q98+OGHXHzxxQCMGjWKrVu38vjjjzNnzhxSUlKor6+ntLS0xaxKYWEhKSkprZ43JCSEkBBJvPR3shGhf0uICCbYaqa+0UZhea1jJ1w9QVryU4TH7f8CtCZIGQlxfTt3jgsfhYPfQP42WPcCnHWbR4covM+jMyoNDQ00NDRgNrc8rcViwWZT38DGjx9PUFAQS5cuddy+b98+cnJymDp1qieHIwxGNiL0b2azqdXNCfUAdJw0ehOetmexusya1/lzRCbBeX9Rx8sehlPZXR+X6FZuz6hUVlZy8OBBx5+PHDnC1q1biY+PJyMjg7PPPpt77rmHsLAwMjMzWb58OW+88QZPPvkkADExMdx0003cfffdxMfHEx0dza9//WumTp3KlClTPPebCUNpvhHhRGn05rd6x4SSXVxNvr2XSkVtA/sKKwBVmiyEx9RVwKFv1fHQLgQqAGOvU83fslfDZ7+Baxd1XOIsDMPtQGXjxo2ce+65jj/ffbdqrHPDDTfw2muv8e6773Lfffdx7bXXUlJSQmZmJg8//DC33HKL4zFPPfUUZrOZ+fPnU1dXxwUXXMA//ym17v5K0zRySqpJjwtXSzqVJ+DEXudP0V5qGzVSqy6k3DKIkX1kI0J/dfouyttyy9A0SI8PI8lo7daFfzv4jWrwFt8fkrq2gzNmM1zyD3hhmtoHaNcHKndF+AW3A5VzzjkHTWt991SAlJQUXn311XbPERoaysKFC9tsGif8y5vfrKNx+ZNMDs8jy5KHuab4jPuEAe8Fr2dhzN2EBs3t/kEKj0iN0UuUVaDiXPaR2RThYXs+VZdD53lm9qPXYJjxW/jur/DF72HALAiTf7f+wEBdfYQ/qm1oIvz7x7nR+iXD6ndgrilGwwRx/WDwXJh2J1z+AnuiziLU1MBvyv+m2lrbbB2eWxiPc78ftfSzSRJpPafqJKz7N5Tn+XokvtdYB/u/UsdDL/XceaffCYlDoOoEfP2A584rvEoCFdElH2w8yjk21VH41dDrubjurwyte5Unh/6XpmvegfP+D8b8iDu5hxca7evMK/4O710HdZU+HLnojOb7/dhszRq9yYxK133xO/jiHnh2Aqx+GhrrfT0i3zm8XDVqi+oNqeM8d15rCMx7Wh1vfgOOrvLcuYXXSKAiOs1m09i8/FMSTBXUBMXxo7seZ9TEmdRqwTzz7UF+8tI6iipqKa2uZ9+JGh5t/BEVc58FSzDsXQyvXKB2RBV+o/nSz8ETlVTUNhIebGnRgl10QlMjHLD3mmqoUt/2X5gGh7/z6bB8Zq992SfrEpVf4kmZU2H8jer40zuh4cxNNoWxSKAiOu3bvUWMq1wOgHX4pYSGhPDIlSP5x9VjCA+2sOZwMRc9vYoXlh8G1EaEUZOvh59+BhFJULgT/n0uZLe+dYIwHn3pp6ymgZUHTgIwOi3WWHvD+KNjG6CuTOVMXPochCfCyf3wxmWw6KdQdtzXI+w+tibY+7k6HnqJd55jzp8hMhmKD8CqJ53Xa5oqX975Piy5D146D54cDsv+GtgzXD4m7y6i015ecYALLBsACBrp3KTy8rF9+OS26QxJjuJkZR0vLD8ENMtjSJ8ENy+DlFFQfRJenwdb3ur28Qv3RYcGERmicvA/265yKSQ/xQMO2mdTBsyCcdfBrzfCpJvBZIZdH8JzE9XmeoHwYZmzVr0vhMVB5jTvPEdYLMx9TB2vfBK+fRje+TE8PhieHgX/+5nadfnYeig/Bsv/Bv+aCcc2eWc8ol0SqIhO2XGsDHPOKhJMFTSFxUPfGS1uH5gUyUcLpnH1BOe+TBObN3qLSYOfLYFhl4GtAT7+lawX+wl9z5/NOaUAjMuM9d1geoqDX6vLgeepy7A4uOjvcPNySJ+sloO+eRCemwBf/lH1F+mpSxZ6tc/guWAJ8t7zDLtMPYetAVY8Bvs+g6oiMFshdawKFK/4N1z+vJrhOrEHXp6jXv/6au+NS5zBoy30ReB4adVhLjavA8AydB5YzvynFBZs4W8/GMWMwYmsOVTMvNGpLe8QHAE/eA0+XgDb3oaPb4NbV6vrhWH1jgljf6EzEXpsusyodEllkWrvDjBwdsvbeo+CG5fA9ndV3kppNqx5Tv1Yw6DvdPWYgXMgYaD/NzHTNJW/Bl1v8tYRkwkueRI+aYCQKEibCH0mqNc86LQ9jwZdAF/ep5rGrXkO9n4Glz6r9hISXieBinBbXmkNX2w/xgNBatmH4Ze3e/9LRqVyyajU1m80m2Hu3+DICjh1BJb+BeY+6tkBC4/SZ1QABvSKIC4i2Iej6QEO2rcT6T1atXs/ndkMY36sPrgPfK3uf2gpVOSrmRh9NiYmAyb+DKbf1X1j97T8rVCWC0ERMODcDu/eZdGp8JP3O75fRAJc+W/VJG7xXeq96vVLVFLuef8HodLE0ptk6Ue47bXvjzKB3SSYKiAsHvrO7NoJQ6PhUnvJ4LoXJLnW4FKb7bArZckecPqyT1tComDElXD5Qrh7D9z6vdrDpt/ZqpKuLAe++bN/J97qe/sMmnPmrIYRDL4AfrXWWTW06VV4fhpUFPp2XD2cBCrCLRW1DbyzLsex7MPQS1pd9nHbwDkw9ieAppaCZA3YsHrHOj9AJJG2i2xNzv1sBs5x/XEmEyQPh2m3ww2fwO+POvuN7Pvc48PsNnp+Slc2IfS20GiY9w+4YbGaxSrLhc2v+3pUPZoEKsIt/92QS3VdHRfryz7DLvfcyc9/GKJSoeSQ2uVUGFJqjHPpZ5wEKl1zfDPUnIKQGJUj0VnBESo5FFT+hD86sR9O7gNzEAw+39ej6Vi/GXDuH9Tx9vdUfo3wCglUhMsam2y8uvook817iNXK1bJPvy4u+zQXFuvsGrlmIeSs89y5hcf07xWJyQSJkSEM7BXp6+H4N0dZ8jldn5nMsvccOboSakq7di5f0Ju89T/bf3I+hl6ikpqLD0DeFl+PpseSQEW47IudBRwvreHKEPtsytBLPF8+OPh8GP1j1BLQr6ChxrPnF12WEhPKf342mf/cNEntli06z9X8FFckDoTEwWBrdAZA/qT5JoT+IiQKhtg3Wd2xyLdj6cEkUBEu0TSNl1YexkITF1k3qis9uezT3IV/hcgUKD6oOkIKw5k+KJGhvaN9PQz/VlWsln7gzLLkzsq6WF362/JPaa59RsIEQy729WjcM+qH6nLn+yrnSHicBCrCJRuzT7HtWBnTgvYR3nBKNaTy5LJPc2FxKlkNVM+C3A3eeR4hfOnQt4AGySNUmawn6B/yB75WOxD7Cz2wypgKkb18OxZ3DZit3rMqC+HIcl+PpkeSQEUoxzdDwY42b35xhdqv51e97PfJ8sKyT3ND5sKoq0Gz2ZeA2ujCqWnyLUb4J8eyj4dmUwD6jFd72NRXqFwVf9FdTd68wRoMw+1biGyX5R9vkIZvAgp3wUtzAA3mPaP2Gmlmd145X+8pxEITE2rsbe47aPLmERc+CoeWqc3ZXpyl+io01Kh24g01qoS5wV7GfOEjMPmX3h+TEJ5gszkbvXkiP0VnNqsgf9NramM/d0qefaXqJGSvVsdZfrbsoxv5Q9j4isqzueRJY/aA8WMyoyJg6f8DrUnNXnxyG6x+xnHTiYo6fvHGRjQNftWvEGtNsX3Z52zvjys83rkEVLQLjm9Ul6eOqmnW+gr7uJvg++ekPFD4j/ytauO94Ei1l48n6cs/+z5XAZEn1FWqDfkqizz//2zXh+q9p/doiMv07Lm7S/pk1VOlvgL2feHr0fQ4MqMS6LLXwP4lYLLA6Gtg61vw9f1Qc4ramX/kF29s5HhpDX0TwrktaSfko771eHPZp7msi1VjpcpC9S0lKFz1jNCPzVZ4/izVlfPYRkjvQi8KIbqLPpvS/xy1dOBJ/WaqAKgiH/K3qOWgztI02P0xfPF7qCxQ14XGqOqihEGQOEgdJw6G+P7ul1g31qldoQHGXNv5cfqa2QwjfwCrnlTVPyOu9PWIehQJVAKZpqmW26CWe+Y9rTY2W/p/sOpJNuw4yPbCHxITFsIr148j5I1fqPsOu6J7x9nRxl9DLoId76msewlUhD/wRn6KLihUnXf3xypJtbOBSmkufP5b9UUGIDgK6iuhtgyObVA/zfUaCj/7Qs24umrLf6D8GET1hnE3dG6cRjHqhypQOfA1VJeoGWHhEbL0E8j2L4Hctaph0dn3qutm3A2XPIWGiRlln/BM8EL+9aOR9K/eBlUnIDRWNWQyEv3by64PJbFWGF/NKeeHvLdySPTmb3s70U7f1gRr/gkLJ6v3CHMQzPwd3HMQ/pgPt6yGq16Dc/8II6+C3mPAGgon9rjXTqChFlY8oY5n/EYFWP4saSikjARbA+z+yNej6VFkRiVQ2Zrgm/9Tx1NugejejpveN53PsvrbeDLon1xiXgPrfw0R9pJBbzR566oBs9R0dGUB5KyBvtN9PSIh2nZomcrJSBwCsRneeY5B56nl3BN7oPgQJAxw7XH52+DTO5xdVtOnqJnWpCznfVJGqJ/mDn8Hb1wGG16CcderD+yObH4dKvIguo96TE8w8oeqenL7IpjwM1+PpseQGZVAtf2/6k0sNBam3em4ev2REu79YDuLbVP5aOgTarbl4New7W11h+5e9nGFNcRZ1rjThS3bhfAlPT9lkAerfU4XFucM2F3ZpLChBr76E/z7XBWkhMTAJU/BjV+0DFLa0v8ctdeQZoPPf9dxwm1DDay0z6bM/K36P9wTjPwBYIKc76E0x9ej6TEkUAlEDbXOKdrpd6k9doCjJ6v45X820tCkMXdECj/44U/h+o/UmxYYc9lHN2K+utz9MTQ1+HYsQrRF05zt7b2Rn9Kco0ttB4GKpsEHv4Dvn1UVdMOvgNvWqxkBsxsfEec/rL7Y5Hzf8ReGja+qBPmYDBjzE9efw+iiU50BorTU9xgJVALRxpfV1uRRqY7eI2XVDfzstQ2cqm5gdFoMT/5wjNrHJWMK3PgZpE1Sa9JGW/bR9Z0J4YlQXSzdIYVxFexQS5RB4ZA5zbvPNeQidZm7VvUqacvKx1X/D3MQXPO2yj+JSnH/+WLTVY4bqNmZusrW71dfpZJOwT6b4uGqJ1/TW+pvXyQtEzxEApVAU1sGKx5Xx+fcC0Fh2Gwav3p7E4dPVpEaE8qL108gLNjifEzKSPj51zD5Zt+M2RUWq7MJ3c4PfDoUIdqkz6b0m+n95Y7YdEgZpZZj9Mqd0+3/Cr59WB1f/HjXG66ddTvEZqrS6JWPt36fDS+rxPzYTBjz4649nxENvRQswWppvXCnr0fTI0igEmi+fxZqSlTfA3vfglUHT7L6YDFhQRZe/ulEkqL9NPteX/7Zs9i/9jkRgcOx7NNNHWPbq/4pPgTv/xzQYPyNMP6nXX++oFDVJRpUE8biQy1vr6uE1f9Qx2f/3rgztF0RFguDL1DH29/z6VB6CglUAklFIaxZqI5n3e9ozvT690cBuHpiun/viJs+RS1n1ZU5ExaFMIraMshdp467LVCxL/8c+lZtOaGrq4B3f6z+r6RPhrmPee45h1ykfj9bAyy5t+VtG15Uy7Px/dVeXj3VyOY7KnuoO3AAk0AlkKz4u9obp88ER5VMTnE13+4rAuD6qX7avlpnNjs3B5PqH2E0h5eDrRHiB0B8v+55zuQRKmG1sQYOL1PXaRp8dCuc2AuRKfDDNzybJ2IywYV/UzkvB76CffZlp9pyWP20Oj779+53sfUng85XRQjlx537GIlOk0AlUJQchk2vquM5f1ZvJsB/1h5F02Dm4F707xXpu/F5ir78s+9zlbQnhFHs+VRdDr6w+57TZGpW/fOZumyePHv1fzqXONuRxIEw9VfqeMm9qtJw/b9Us7uEQTDiB55/TiMJCoVhl6rjHbL801U9OKQVDrYm+PKP6tvcwDmOlvTV9Y38d0MuAD89y89nU3R9xqkkvdJs2P+l7LkhjKGxzrlZ3bDLuve5sy6Cdc+rhNp9X7RMnk2f5L3nnXkPbPsvnDoC3/1V7egMPX82RTfqarVFwOY3VK5KaEzrPyN/CJlTfT1aQ5MZlZ7OZlOdJvd9rjpVzn7QcdNHW/Ior20kMyGccwYn+XCQHmQyOWdVZPlHGMWhZWpn3ajekNbN+1FlnKV6IFUXw3+vw6PJs+0JiYLz/6KOVz+tcnQShwTOl4fMaaqtA0Bjreobc3K/2j7h4Dfq/WnjK/DBzVLG3IEACGuNY/uXr9N48iBjf/A7TCFR3n9CTYPPf6OiepMZ5r8IvUfZb9IcSbTXTclUPVN6ihHznZuD1Zapby1C+NKeT9Tl0HnuNVHzBItVLTdtf1cluHo6ebY9I69SH8Y5a9Sfz7kXzJb2H9NTmM1w01fqPaj5T125uqwpVTvVl+WoLrZxPWRW2wtkRqWbFGfvYdj3dzLuwDNUPDUZjq7y7hNqmtqafeMrgAkuf8E50wCsPVzCvsIKwoIsXDUh3btj6W7Jw1X5dVNd5zZlE8KTGuth72J13N3LPjq9x5A3kmfbYzLBRX9XDe76jIdhl3fP8xqFyaTKleMy1ZfEfjNUztCYH6scntRx6n6ScNsuCVS6Sd7ih7GaVJladO1xeO1iFUi4kfCZX1aDzebCFKGmqc6Q6/+l/nzZczC6ZSmgPptyxbg+xIT1sF4GzZd/dknzN+FjR1eob9ARvSDDR7kIgy9UAcrPv/ZO8mx7UkbCnTvghsXdP5tkdJlnqUsJVNol/2q6QW3REbJOqG/2f4j4P95uPFfdsO4FeGE6ZK9p9/GapvHXz/cw9ZFvued/29t/Mk2Dpf8Ha55Tf77kHzC25V4ax0tr+Gp3AQA3TO3r7q/jH4bb18EPfQvVJb4diwhsuz9Wl0Pn+W7Zw2RSszne2q25IxGJEBzum+c2Mn1foOzvfTsOg5NApRvkfPowQTSx3jyaP91xG+8k/5br63/PCXOiKht+da6qymmoOeOxNpvGAx/v4t8rDgPw/uZjbMpu54P3u0dh1VPq+KLHYcKNZ9zlrbXZ2DSY2j+BISndkCvjC70Gq29ytkZnfoAQ3a2pUXVKBt8t+wjjSp+k8gdLDkN5vq9HY1iSTOtltlO59Mv9EIAT4+4kPNjK8z8Zx6XP1TCrahAvpXzA5NLP1QzI/iUw6ZdqDxBLMDazlTfX55F/uIxzLBZS46PZe7KRNz8qZty1Z2EKjoCgMAiOUK2oV/wdlj+qnviCv8KkX5wxntqGJt61lyTfcFbf7noZfGPEfLUJ3M73vV/hIERrslepLSvC4iFzuq9HI4wmNEZ9ocrfppZ/Rvbw/jKdJIGKlx3/7BHSaWQdwzn7PNUAKC0unGd/NJbrXl7H1QU/4ZVpFzNr/0NQfBC+uMfxWDNwPXC9nvdWAYQAp4DnTnsis1XNHgDM+T+YuqDV8Xy6LY+Sqnr6xIYxZ2gPKUluy/Ar4Zs/w5GVUFHQ/WvzQuy2z+ZlXRwYvUOE+zKnS6DSAVn68abyfJIPqq6EB7N+RWSI841q2sBEfn9hFgC/XBvP1nlL1M6jQ+fRNOgCdoZNZHXTcNbbsiiNHw29R0PSMEpD0yjSYqkkHM3UbL3b1qimEGfdD9PvbHU4mqbx+pqjAFw7JQOrpYf/9cdl2ntWaM4PDCG6i63J2Y020KpdhOscCbWSp9IWCfG9qPirv5NAAxtsQzjngjObHN08sz/bj5Xx2Y58bl50kMW3/5Ho0CB++Z9NLD91gmCrmReuHUdsVrLjMSH1TVz4+HcUlNfy+wuGcOuMDGioUhuOWUMhIqHN8WzOKWXn8XKCrWaumeijpLruNvRS1WBp32cw+WZfj0YEkpy1UFWkpvf7zfT1aIRR6YHKib1QdVIlHosWevhXah+qKCR6138AWJfxC/rEnZnxbjKZeOwHoxiUFElRRR0L3trMja9uYPn+E4QFWXjlhonMahakAIQFW/jdhUMAWPjdIU7WahAWBzF92g1SwFmSfNnoVOIjuqmPgq/p+5wcXaUaLAnRXfRqnyEXd1/fEuF/wuMhaZg6llmVVkmg4iVV3/2DIK2ezbaBTD+/7XXHiBAr/7puPFEhVjYcPcWaw8VEhlh5/WeTmD6o9cj68jF9GNknhsq6Rv7xzX6XxlNUXsvnO1RWeY9Pom0uYQD0ylJLYwe+9vVoRKCw2ZzVZlLtIzoiyz/tkkDFG6pOErTlFQC+SLieMRlx7d69f69Inrp6DCYTRIdaefPnk5nUL77N+5vNJv508VAA3l6Xw/7Cig6H9ObabBptGhMy4xjRJ8Bayjt2j13s23GIwHFsA1TkQ3AUDDjX16MRRpc5TV1me7ljuZ+SQMULGlY9Q7Ctlm22/oyfdZVLj5kzLJmv75rJt789hzHpsR3ef3L/BC4YnoxNg79+vqfN+1XWNfKnj3bwzLcHAbg+kGZTdHqgcvAbtd28EN6mz6YMuVC1GxCiPXqgUrBTlqhbIYHKaTZln6KyrrHzJ6gugfUvAvBO6NWcN7y3yw8dmBRFYqTrb2r3zh2K1Wziu30nWLH/xBm3L99/ggueWsGba3MAtfngJSNdH0+P0Xus2rW2vhKOrPD1aERPp2nO/BRZ9hGuiEqGhIGAppKwRQsSqDTzze5CfvTiWm5+YyO1DU2dOoe25p8ENVWz25bJkJk/xOLFXYn7JUZwvb0F/sOf7aHJvg9QWXUD9yzaxg2vrOd4aQ3p8WG8/fPJ/OXyET1rl2RXmc0w5CJ1vO8z345F9Hx5m6EsF4IiYOAcX49G+AvZ96dNEqg0kxwdSrDFzPeHirn9nS00NtncO0FNKU1rnwfg3+YfcFU3lADfPnsgMWFB7Cus4L2NuXy9u5DznlrOok3HMJngxml9+fLOmZw1MMBL3hx5Kp+rREchvEWfTRl8vuocLYQrHHkqEqicTgKVZkamxfDi9RMItpr5anch936ww7XdikFN9y7/G9aGSvba0kmeOL9FgzdviQ0P5vbZgwB48JNd/OKNjRRV1NE/MYJFv5zKg/OGEx4s7XLoOwNColVfi+MbfT0a4S2aBlvehNz1vnt+WfYRnaEHKnlboa7Sp0MxGglUTjN1QALP/WgsFrOJ/206xkOf7UHTOghWGmrhw1tg7T8BeKZpPjdM698No1Wum5JJ34Rw6httmE3wy7P78/kdM5jQt+3KoYBjDYZB56njvbL802MdXQkfL4CXz4NFP4XSnO59/oLtcOooWMNg4Hnd+9zCv8WmQ0wGaE1wzEeBtkFJoNKK84en8Nj8UQC8svoIz9krZlpVUQivXwLb36UJMw803IBlxOWkxnbflG+w1czCa8fxo0npfPiradw3dyihQT7aTt7IHMs/Eqj0WHlbnce7PoTnJsKyv6rOzd1Bn00ZOBtCIrvnOUXPoeepHPXy8o+mwZd/hA0ve/d5PEQClTbMH5/GA5eoboFPfL2fN+x75LSQv43Gf50NxzZQpoVzff3v+TDoYn49a2D3DhYYnhrDI1eOYrQLpc0Ba+B5YA6C4gNwwrVGecLPFNlL9UddrTZ7a6yF5X+D5ybAjv+pN2hvabHsc7n3nkf0XH31PBUvN347sRfWPAdf/B4aarz7XB4ggUo7fja9H3fY8z8e+HgXH2057ritavP/aHjxPKyV+Ryy9ebKhr/Qd+LFLPvtOQxOjvLVkEV7QqOde65I9U/PVLRbXQ6dBz9dDFe9rqbTy4/D+zfBKxdC3hbvPPeR5WoHdEswDL7AO88hejY9T+X4Ru8GEKey1aWtAfK3e+95PEQClQ7cOWcQP7U3SfvNom0s2ZHHljd+T8QnNxFkq2N50yj+nvFP/nn71Tx8xUi3+qAIH5Dln57L1gQn9qnjpGFgMsHwy+G29XDunyAoHHLXwr/PhU9uh6pizz13Qw0svksdj7tBBcVCuCu+P0SmQFM9HN/kvedpnrt1bIP3nsdDpBykucLdsOpJ1UnSGgrWUEzWEB6IDmFcRgmbjtfAe08y1qL+Yv8XfBm9rniUF4am+njgwmVDLoLP7ra3OC+AqBRfj0h4yqmj0Fij/u/G9XVeHxQGZ98DY34M3/wZdrwHm19X3WNnP6ACC3MXc7pW/B1KDkNUqjqnEJ1hMqk8lV0fqOWfvtO98zyl2c5jCVT8THke7Fh0xtVm4FLg0iD15wasbBxxP5dfcTtWi0xK+ZXo3tBnvPq2su8LmHCjr0ckPEXPT+k1pPXAI6YPzH9R/Z1/9lso2qVmQTa9Dhc/CWnjO/e8hbtg9dPq+KK/y2yK6Bo9UDm6Cs7+nXeeoyzXeXzM+O0aJFBpLnEgXPBXlYDXWHfGpa2hlpNVjUTMuJWpA6f5erSis7IuVoHK3s8kUOlJ9EAlaVj798s8C365Aja8BMsehvyt8NJsGHcdzP4zRCS4/py2JrWMZGuErEtg6CWdHb0Qij6LkrseGutVawVPa770U35MfUmPNu7KgAQqzcX1hakL2rzZDCR122CE1wy5GJb+P5X8WFcBIZL83CPoibRJQzu+r8UKU26B4VfANw/Ctndg8xuw274cNP5GtfVCRza+ohIfg6PUbIoQXZU4BMLioaZEBdHpkzz/HHqgEhQODdVqVmXYpZ5/Hg+RdQsReHoNgfgBKmHt4De+Ho3wFFdnVJqLSoYrXoAbl0DyCKgtVTlM712ngtj2lB2Hb/5PHc950NDfSIUfMZu9u+9PfRVU2xPJB1+oLg2epyKBigg8JpNU//Q0jfWqPw64F6joMqfCzcvhwkdVefHexfDSHCg+1PZjvvgd1FdA2iSYcFPnxi1Ea/QyZW80fiu156eExDg3zTR4nooEKiIw6YHK/q/Uh1xrSnNg5RNqI0NhbMUHVJ5ISEznZzYsVphyK9z4BUT1Vk2xXjwXDrQy67bnUxXMmK0w72nXlomEcJU+o5KzVuVBeZKeSBubDmkT1XHeFmhq8OzzeJD87xKBKW0iRPSCujLIXuW83mZTH0xvXwNPj1a5LItu6HgZQPiWY9lnqJox64q0CXDzd2qmpLYM3r4KVv3D2dW2tgw+v0cdT7sTkjsxgyNEe1JGqk1U6yugYIdnz62XJsdmQMJAFdw31qjqNYOSQEUEJrMFhsxVx3s/h+oSWP0MPDsW3poP+78AzaaWAZrqVamgMC53EmldEZWiOtuOu179O/jmQdXZtr5aBa8V+SrPaeY9nnk+IZozWyBjijr2dJ6Knkgbm6FmAvWyfAPnqUigIgLXEPvyz9a34Yks+Pp+1TQsJAYm3woLNsDY69R9Dn3rs2EKF3QmkbYj1hCY94zqsWK2ws734V8znRu5zfsHBIV67vmEaK7vDHW5Z7Fnz6vnqMSkq0t9+cfAeSoSqIjA1f9sCIqAhipoqoOUUeqD6Td7YO6j0GswDJil7iuBirF5ekZFZzLBxJvghk/VUmHxAUCDMT9x7hslhDeM/AGYLJDzvWc3UW0+owLNAhWZURHCeILC4IrnYfIt8POlqgnY+BsgOMJ5n34z1JtF8cGWTZKEcdRXqZkw8Hygoss8S+Wt9J2h8gfO/4t3nkcIXXSqs3x402ueO+/pgUof+9JPySG1BG5AEqiIwDbsMpj7N5VA2VoSZmiMug3g0LLuHZtwzYm96jIiCSISvfc8MWkqb+WWVRAe773nEUI3/qfqctvb0FDb9fM11EBVkTrWA5XweJVUC97dCLELJFARoiOy/GNszSt+hOhJBs6G6DSoOaVK4ruq7Ji6DI6EsDjn9QZf/pFARYiO6IHK4e8839NAdJ03EmmFMAKzRVWegWeWf5ov+zSfQdZnjXtKoLJixQrmzZtHamoqJpOJjz76qMXtJpOp1Z+//925D0ZJSQnXXnst0dHRxMbGctNNN1FZWdnlX0YIr0gdpyqBakshb6uvRyNOp/d/kBkV0RON/QmYzKrf08kDXTuXHqjoFT86x4zKJtVLymDcDlSqqqoYPXo0CxcubPX2/Pz8Fj+vvPIKJpOJ+fPnO+5z7bXXsmvXLr7++msWL17MihUruPnmmzv/WwjhTRarSqoFOCzLP4YjMyqiJ4vpA4MuUMddnVU5PZFWlzQcrGGqAWZxF4MhL3A7UJk7dy4PPfQQV1xxRau3p6SktPj5+OOPOffcc+nfvz8Ae/bsYcmSJbz00ktMnjyZ6dOn8+yzz/Luu++Sl5fXtd9GCG9x5KlIQq2hVJdAZYE6Tsry7ViE8BY9qXZrF5NqHe3zTwtULFboM04dG3D5x6s5KoWFhXz22WfcdJNzw641a9YQGxvLhAkTHNfNmTMHs9nMunXrvDkcITpPD1Ry10k7fSPRZ1NiMyAkyrdjEcJbBp0H0X2gpkTtMdVZjhmV9DNvM3CeilcDlddff52oqCiuvPJKx3UFBQUkJSW1uJ/VaiU+Pp6CgoJWz1NXV0d5eXmLHyG6VXw/iOunNr6TdvrG4Wj0Jss+ogfzVFJtW0s/YOgOtV4NVF555RWuvfZaQkO71mb6kUceISYmxvGTnt5KNCiEtw04V11KmbJxSGmyCBR6Uu3RlXDyoPuPb6yDCvtkQGzmmbf3sc+oFO023Kyx1wKVlStXsm/fPn7+85+3uD4lJYWioqIW1zU2NlJSUkJKSkqr57rvvvsoKytz/OTm5npr2EK0TfJUjEcSaUWgiEmDQeer482vuf/4smOAppJmwxPOvD26t6oG0myQt6UrI/U4rwUqL7/8MuPHj2f06NEtrp86dSqlpaVs2uTsgPftt99is9mYPHlyq+cKCQkhOjq6xY8Q3a6v3k7/gLTTNwJN894eP0IYUfOk2sY69x7bVg+V5gyap+J2oFJZWcnWrVvZunUrAEeOHGHr1q3k5DjfuMvLy1m0aNEZsykAQ4cO5cILL+QXv/gF69evZ/Xq1dx2221cc801pKamdv43EcLbwmKlnb6RVBSo3jYmCyQM8vVohPC+gedBVCpUF7vfqbatip/m9OUfg+WpuB2obNy4kbFjxzJ27FgA7r77bsaOHcsDDzzguM+7776Lpmn86Ec/avUcb731FllZWcyePZuLLrqI6dOn8+9//7uTv4IQ3ai/5KkYRpG90VvCAAjqWh6cEH7BYoVx16ljd5Nq26v40TVPqNU0t4fnLVZ3H3DOOeegdfAL3Hzzze02cIuPj+ftt99296mF8L0Bs2D5o852+maLr0cUuCSRVgSisdfBir87k2oTB7r2uFIXZlR6jwJzkNq4sDQH4lpJuvUB2etHCHf0GQ8h0WrJIX+rr0cT2CSRVgSi2HS1BASw+XXXH9dW+/zmgsIgZaQ6NlCeigQqQrjDYoV+M9WxLP/4liTSikDlSKp9y/WkWsfSTwezJAbspyKBihDukjJl37PZoGivOpYZFRFoBp0PUb1VUu3+Lzu+f1MDVNi3qGlv6QeaBSoyoyKE/9Ibv0k7fd8pPQqNNWAJgfj+vh6NEN3LYoVhl6vjwy58YSo/rvqjWEIgolf799UrGwu2u18C7SUSqAjhrvj+ENdX2un7kp6f0muIJDSLwNR3uro8urrj+zav+DF38LEf1xfCE6GpHvK3d2mIniKBihCdIcs/viV7/IhAl3kWYIKT+6DyRPv3daXiR2cyGW75RwIVITrDEahIQq1PSGmyCHTh8ZA8XB1ndzCz60rFT3MG61ArgYoQndF3htogTNrp+0ahzKgI4fLyT3u7JrcmbaLqp2Jr6PzYPEgCFSE6IyzW2W5aln+6V2O9ChBBZlREYMucpi47ypVztM93sYFb5llw3zG4+s3Oj82DJFARorP05Z+tb6sPT9E9ig+qRObgKLWjrBCBSg9UTuyBqpNt3680W1221z6/OUuQobalkEBFiM4a+QO1ZXruWvjfjapXgacU7YVlj8Dm/3junD1F80Zvbe0CK0QgiEhwLn9mt7H809QI5S72UDEoCVSE6KzEQfCjt1Vvgr2L4f2fqzeFzqoohDUL4YUZ8M/Jak+hT37dcUZ/oJFEWiGcHMs/bQQqFflqBtIcBJEp3TcuD3J7U0IhRDMDZsE1b8G7P4bdH6kp0yv+5Xpvj/oq2PsZbHtXNW7SbOp6s1Ul6zbVw6kjENlBk6ZAInv8COHUdzpseLHtPBVHxU9axz1UDMo/Ry2EkQw6D656XQUXOxbBxwtUi/f2lByBxXfB3wfBB7+AQ0tVkJI2ES56HH6zH9ImqfueOur1X8GvyB4/QjjpMypFu6C65Mzby9zooWJQMqMihCdkXQQ/eAUW3Qjb3lEzK5c8feY3mMJdsOop2Pm+c/Ykrh+MuhpG/RASBjjvG9dX9Uc4ld1tv4bh1ZxyBm4yoyKEmm3tlQUn9qo8laHzWt7ubmmyAUmgIoSnDLsM5r+oclU2v6HWhC9+QiV85m6AVU/Cvs+d9x84B6bdqaZuW0sKjbOXEsqMitP+rwBNvTHLcpgQSuY0FagcbS1Q0St+JFARQgCMmK8Saj/8JWx8WeWglB+HoyvtdzCpgGb6XZA6pv1z6T0PSmVGxWHPJ+py6KW+HYcQRtJ3unq/aS1PxZ32+QYlgYoQnjb6atXR8eMFsP1ddZ3ZCqOvUTMoiYNcO09cX3UpSz9KfRUcXKqOh17i27EIYSR6nkrhTpWnEh7vvE2WfoQQrRr7E9A0WPF3GDIXpt7merMlnb70U35M9WixBHl+nP7k4FJorFFvuCmjfD0aIYwjKhkSB8PJ/ZCzBrIuVtfbbFB2TB27us+PAUmgIoS3jLtO/XRWZDJYQ6GxVmXux/f33Nj80Z5P1eXQS6XRmxCny5ymApWjq52BSmWBmt01WyGqt2/H1wVSniyEUZlMzjyVQE+obayH/V+q49OTBYUQzTYoXOm8Tl/2ie4DFv+dl5BARQgjkzwV5egKqCuDiCRnfxkhhJMeqBTsgJpSddwDEmlBAhUhjE1KlBV92SfrYr/trimEV0WlQPwAQIOcteq6HlCaDBKoCGFsUqIMtia1zQDIso8Q7Tl9+cfRPt9/E2lBAhUhjE2WfiB3PVSdgNAY6DvD16MRwrj0QEXfSbkHtM8HCVSEMDZZ+nEu+wyeC9Zg345FCCPT+6nkb4Pash7RQwUkUBHC2PSln5oSqC337Vh8QdOalSVLkzch2hXTR+0dptkge02zZFpZ+hFCeEtoNITZu0wGYp5K/jYoywFrGAyY7evRCGF8+vLPrg+hqQ5MZlWe7MckUBHC6AI5T2XvYnU5aA4Eh/t2LEL4Az1Q0ffFiu7j912tJVARwujiArjyp3k3WiFEx/Q8lYZqdennFT8ggYoQxheo3WlP7Fdb15utMOh8X49GCP8Qm+58zwC/T6QFCVSEML5AXfrZa59N6Xc2hMX6dChC+JXmZfwSqAghvC5QS5T32PNTpMmbEO7pO8157OcVPyCBihDGp8+olGarct1AUJoLeZsBk3MnWCGEazKbByoyoyKE8LaYdFVi2FgLlYW+Hk330FvmZ0yByCTfjkUIfxOXCX3GQ0g0JI/w9Wi6zH/3fRYiUFiCIDpN9RM5la02H+vpHNU+suwjRKdc9yE01kFEoq9H0mUyoyKEPwikEuWqk5DzvTrOkm60QnRKaEyPmY2UQEUIfxBIJcr7PlctwHuPdgZoQoiAJYGKEP4gkEqUd76vLrNk2UcIIYGKEP4hUEqUD34Dh78DkwVGXOnr0QghDEACFSH8QfMS5Z6qsR6++L06nnwLJAzw7XiEEIYggYoQ/kDPUSk7pj7Qe6K1/4TigxCRBOf83tejEUIYhAQqQviDyCSwhgEalOX6ejSeV54Hyx9Tx+f9P1WxIIQQSKAihH8wmXp2ifJX90NDFaRPhlFX+3o0QggDkUBFCH/hqPw56stReN7RVbDzf4AJLvo7mOVtSQjhJO8IQvgLRy+VHjSj0tQIn9+jjif8TPVOEUKIZiRQEcJf9MQS5Q0vQdFuCIuHWX/y9WiEEAYkgYoQ/qKnlShXFsGyh9Xx7AcgPN634xFCGJIEKkL4C08u/ZTnwdZ3wNbU9XN11jf/B3Xl0HsMjLved+MQQhia7J4shL/Ql35qSqC2HEKjO3+uJffB7o+gsRYm3OiR4bkldwNsfVMdX/Q4mC3dPwYhhF+QGRUh/EVIFIQnqOOuLv8c36Qu93/ZtfN0hq0JPv+tOh7zE0if2P1jEEL4DQlUhPAnnihRri13No07urL7O91uewfyt0JIDMx5sHufWwjhdyRQEcKfeCJPpWiP87i+EnLXdW1M7jr4jbqc+ivVcVcIIdohgYoQ/sQTJcpFu1r++dDSzp+rM4oPqUvpmSKEcIEEKkL4E0+UKOszKtFp6vJgNwYqmgYlh9VxvOyOLITomAQqQvgTTyz9FO5Wl5N/qS4LtqueJt2hskgtN5nMztkhIYRohwQqQviT5jMqmub+4zXNufTT/2xIGaWODy3zyPA6VGJf9olJA2tI9zynEMKvSaAihD+JSVOzEY21UFno/uMrCqDmlDpH4mAYOFtd3115KrLsI4RwkwQqQvgTS5AKVqBzCbVF9mWf+AEQFAYD9EDlW7DZPDLEdumJtAkSqAghXCOBihD+pit5KnqgkjxMXaZPhuBIqDoBhTs8M7726Es/8f29/1xCiB5BAhUh/E1XSpT1RNoke6BiDYa+M9Rxd1T/FMvSjxDCPRKoCOFvulKiXHRaoALN8lS+7dKwOtS8NFmWfoQQLpJARQh/E9tXXbq79GNrghN71XHycOf1A2apy5y1UFfZ5eG1qbIQGqpUIm+slCYLIVwjgYoQ/qaz+/2UHFHVQtYw5zlAzW7E9QVbg9r7x1v0RNrYDLXkJIQQLpBARQh/o+eolB93b0NBvX9KryFgtrS8Ta/+8WaeiiTSCiE6QQIVIfxNRC8ICgc05y7IrtBb5zdf9tF1Rz8V6aEihOgECVSE8DcmU7MS5aOuP67QPqPSPJFW13cGmK0qmCg50uUhtkp6qAghOkECFSH8UWfyVE7vodJcaDSkTVLH3ppVkRkVIUQnSKAihD/S81RcLVFuqHEGCq3NqAAMtFf/HPRCmXKLXZMlR0UI4ToJVITwR+52pz2xDzQbhMVDZHLr99ETao+sgKaGro+xuYp8aKgGk0V2TRZCuMXtQGXFihXMmzeP1NRUTCYTH3300Rn32bNnD5deeikxMTFEREQwceJEcnJyHLfX1tayYMECEhISiIyMZP78+RQWdmKDNSEClb70o1fSdMSx7DNc5bi0pvcYCE+A+grIXd/VEbakz6bEZqj9ioQQwkVuBypVVVWMHj2ahQsXtnr7oUOHmD59OllZWXz33Xds376d+++/n9DQUMd97rrrLj799FMWLVrE8uXLycvL48orr+z8byFEoEkdoy4LdkJ5Xsf3by+RVmc2Q/9z1bGn81QkkVYI0UlWdx8wd+5c5s6d2+btf/zjH7nooot47LHHHNcNGOB8cyorK+Pll1/m7bffZtYstSb+6quvMnToUNauXcuUKVPcHZIQgSc6FdKnQO5a2P0JTLml/fvrpclJQ9u/38DZsPN/qp/K7Ac8M1aQHipCiE7zaI6KzWbjs88+Y/DgwVxwwQUkJSUxefLkFstDmzZtoqGhgTlz5jiuy8rKIiMjgzVr1rR63rq6OsrLy1v8CBHwhl+hLnd92PF9my/9tEdvp5+/DapOdn5sp9NnVKTiRwjhJo8GKkVFRVRWVvLoo49y4YUX8tVXX3HFFVdw5ZVXsnz5cgAKCgoIDg4mNja2xWOTk5MpKCho9byPPPIIMTExjp/09HRPDlsI/zTsUsCkZlXKjrd9v+oSlcwK0Cur/XNGpUDyCECDQ8s8NVJnbxZZ+hFCuMnjMyoAl112GXfddRdjxozh3nvv5ZJLLuGFF17o9Hnvu+8+ysrKHD+5uW504xSip4pOhYyp6nj3x23fT1/2iclQ/VI6os+qeCpPxWaT0mQhRKd5NFBJTEzEarUybFjLhL2hQ4c6qn5SUlKor6+ntLS0xX0KCwtJSUlp9bwhISFER0e3+BFC0Gz554O279Neo7fWONrpf6v6n3RVRT401qjOt7JrshDCTR4NVIKDg5k4cSL79u1rcf3+/fvJzFRvUOPHjycoKIilS53f1vbt20dOTg5Tp0715HCE6Pn05Z9jG6A0p/X7uFLx01zGVLWXUGWhM8jpipJmuyZb3M7fF0IEOLffNSorKzl48KDjz0eOHGHr1q3Ex8eTkZHBPffcw9VXX83MmTM599xzWbJkCZ9++infffcdADExMdx0003cfffdxMfHEx0dza9//WumTp0qFT9CuCsqBfpOh6Mr1fLPWb8+8z6uJtLqrCGQNkE1fstZ6/rj2iKJtEKILnB7RmXjxo2MHTuWsWPHAnD33XczduxYHnhAlTJeccUVvPDCCzz22GOMHDmSl156iffff5/p06c7zvHUU09xySWXMH/+fGbOnElKSgoffNDO1LUQom3DL1eXrVX/aJrrpcnNpdu/NOSu69LQAGd+iiTSCiE6waRpnliE7l7l5eXExMRQVlYm+SpCVBbBE0NUi/w7trdsUV+aC/8YofJD/pAP1mDXznnwG3hzvuqAe8e2ro3v3Wth72KY+3eYfHPXziWE8Gud+fyWvX6E8HeRSWr5B2D3Ry1v05d9Ege7HqQApE0ETGp35ooubm9RLM3ehBCdJ4GKED1BW83f9EDF1URaXWiM8zG5azs/LpsNTuk9VCRQEUK4TwIVIXqCoZeCyQx5W5zN1QAK9UDFjfwUXcZkddmVDQor8qCxVi09xWR0/jxCiIAlgYoQPUFEIvSbqY6bL/+4W/HTXLo9UMnpwoyKvuwT11dKk4UQnSKBihA9xenLP00NcMLe08jdpR9wBir526ChpnNjks0IhRBdJIGKED1F1jwwWVRgUXxI/dgaIDhSNVtzV1xfiExW58jb0rkxSQ8VIUQXSaAiRE8RkQD9z1bHuz+CIr0j7VAwmdw/n8nU9eUf6aEihOgiCVSE6En05Z+dHzZLpO3Eso9OD1Q62/hNNiMUQnSRBCpC9CRZl6gKm8IdqskadK0FfkazDrXu9oa02ZwVSDKjIoToJAlUhOhJwuOh/znq+MReddmZ0mRdyiiwhkLNKTh5wL3Hlh+DpjowB0F0WufHIIQIaBKoCNHT6Ms/uqQuzKhYgyF1nDp2t/GblCYLITxAAhUhepqsi9UsBqiqnYiErp0vo5N5KpJIK4TwAAlUhOhpwuJgwLnquCuJtDp9J+WcTgYqUposhOgCCVSE6Imm3AqWYBh+edfPlT5JXRYfgKpi1x/n6KHSr+tjEEIELAlUhOiJBsyCPxXB+J92/Vzh8Wr3ZYBjbuz7o3ellaUfIUQXSKAiRE/VmSZvbXG38ZutCU4dVcey9COE6AIJVIQQHWveT8UVZcegqV4tP8VIabIQovMkUBFCdEyfUTm+GRrrOr5/SbPSZLPFa8MSQvR8EqgIITqWMBDCE1QDt/ztHd9fNiMUQniIBCpCiI4136DQlcZv0kNFCOEhEqgIIVzjTkKtbEYohPAQCVSEEK5xzKis73iDQsfSjwQqQoiukUBFCOGa1LGqiqeqCE4daft+TY3O0mRZ+hFCdJEEKkII1wSFQu8x6ri9dvpluWBrAEuI7JoshOgyCVSEEK7T2+m3108l1969Nr4fmOUtRgjRNfIuIoRwXXuN3xpq4Ks/wYe/VH/WgxohhOgCq68HIITwI3pCbdEeqCmFsFj152Mb4aNb4eR+9efRP4bzH/LFCIUQPYwEKkII10UmqUqeksMqOOk3A757BFY/DZoNIpNh3tMwZK6vRyqE6CEkUBFCuCd9sgpUtryhlnpO7FHXj/whzP2b2m1ZCCE8RAIVIYR70ifDtndg98fqzxG94JKnYOg8345LCNEjSaAihHBP5jTn8fAr4aLHISLBd+MRQvRoEqgIIdzTazDMfxlCY2DQeb4ejRCih5NARQjhvpE/8PUIhBABQvqoCCGEEMKwJFARQgghhGFJoCKEEEIIw5JARQghhBCGJYGKEEIIIQxLAhUhhBBCGJYEKkIIIYQwLAlUhBBCCGFYEqgIIYQQwrAkUBFCCCGEYUmgIoQQQgjDkkBFCCGEEIYlgYoQQgghDMsvd0/WNA2A8vJyH49ECCGEEK7SP7f1z3FX+GWgUlFRAUB6erqPRyKEEEIId1VUVBATE+PSfU2aO2GNQdhsNvLy8oiKisJkMnn03OXl5aSnp5Obm0t0dLRHz92TyevmPnnNOkdet86R18198pp1Tnuvm6ZpVFRUkJqaitnsWvaJX86omM1m0tLSvPoc0dHR8g+zE+R1c5+8Zp0jr1vnyOvmPnnNOqet183VmRSdJNMKIYQQwrAkUBFCCCGEYUmgcpqQkBAefPBBQkJCfD0UvyKvm/vkNesced06R14398lr1jmeft38MplWCCGEEIFBZlSEEEIIYVgSqAghhBDCsCRQEUIIIYRhSaAihBBCCMOSQKWZhQsX0rdvX0JDQ5k8eTLr16/39ZAMZcWKFcybN4/U1FRMJhMfffRRi9s1TeOBBx6gd+/ehIWFMWfOHA4cOOCbwRrII488wsSJE4mKiiIpKYnLL7+cffv2tbhPbW0tCxYsICEhgcjISObPn09hYaGPRux7zz//PKNGjXI0jJo6dSpffPGF43Z5vVzz6KOPYjKZuPPOOx3XyWt3pj//+c+YTKYWP1lZWY7b5TVr3fHjx/nJT35CQkICYWFhjBw5ko0bNzpu99RnggQqdv/973+5++67efDBB9m8eTOjR4/mggsuoKioyNdDM4yqqipGjx7NwoULW739scce45lnnuGFF15g3bp1REREcMEFF1BbW9vNIzWW5cuXs2DBAtauXcvXX39NQ0MD559/PlVVVY773HXXXXz66acsWrSI5cuXk5eXx5VXXunDUftWWloajz76KJs2bWLjxo3MmjWLyy67jF27dgHyerliw4YN/Otf/2LUqFEtrpfXrnXDhw8nPz/f8bNq1SrHbfKanenUqVNMmzaNoKAgvvjiC3bv3s0TTzxBXFyc4z4e+0zQhKZpmjZp0iRtwYIFjj83NTVpqamp2iOPPOLDURkXoH344YeOP9tsNi0lJUX7+9//7riutLRUCwkJ0d555x0fjNC4ioqKNEBbvny5pmnqdQoKCtIWLVrkuM+ePXs0QFuzZo2vhmk4cXFx2ksvvSSvlwsqKiq0QYMGaV9//bV29tlna3fccYemafJvrS0PPvigNnr06FZvk9esdb///e+16dOnt3m7Jz8TZEYFqK+vZ9OmTcyZM8dxndlsZs6cOaxZs8aHI/MfR44coaCgoMVrGBMTw+TJk+U1PE1ZWRkA8fHxAGzatImGhoYWr11WVhYZGRny2gFNTU28++67VFVVMXXqVHm9XLBgwQIuvvjiFq8RyL+19hw4cIDU1FT69+/PtddeS05ODiCvWVs++eQTJkyYwFVXXUVSUhJjx47lxRdfdNzuyc8ECVSAkydP0tTURHJycovrk5OTKSgo8NGo/Iv+Oslr2D6bzcadd97JtGnTGDFiBKBeu+DgYGJjY1vcN9Bfux07dhAZGUlISAi33HILH374IcOGDZPXqwPvvvsumzdv5pFHHjnjNnntWjd58mRee+01lixZwvPPP8+RI0eYMWMGFRUV8pq14fDhwzz//PMMGjSIL7/8kltvvZXbb7+d119/HfDsZ4Jf7p4shL9asGABO3fubLH+LVo3ZMgQtm7dSllZGf/73/+44YYbWL58ua+HZWi5ubnccccdfP3114SGhvp6OH5j7ty5juNRo0YxefJkMjMzee+99wgLC/PhyIzLZrMxYcIE/vrXvwIwduxYdu7cyQsvvMANN9zg0eeSGRUgMTERi8VyRhZ3YWEhKSkpPhqVf9FfJ3kN23bbbbexePFili1bRlpamuP6lJQU6uvrKS0tbXH/QH/tgoODGThwIOPHj+eRRx5h9OjRPP300/J6tWPTpk0UFRUxbtw4rFYrVquV5cuX88wzz2C1WklOTpbXzgWxsbEMHjyYgwcPyr+3NvTu3Zthw4a1uG7o0KGOJTNPfiZIoIJ6Qxw/fjxLly51XGez2Vi6dClTp0714cj8R79+/UhJSWnxGpaXl7Nu3bqAfw01TeO2227jww8/5Ntvv6Vfv34tbh8/fjxBQUEtXrt9+/aRk5MT8K9dczabjbq6Onm92jF79mx27NjB1q1bHT8TJkzg2muvdRzLa9exyspKDh06RO/eveXfWxumTZt2RpuF/fv3k5mZCXj4M6GzGb89zbvvvquFhIRor732mrZ7927t5ptv1mJjY7WCggJfD80wKioqtC1btmhbtmzRAO3JJ5/UtmzZomVnZ2uapmmPPvqoFhsbq3388cfa9u3btcsuu0zr16+fVlNT4+OR+9att96qxcTEaN99952Wn5/v+Kmurnbc55ZbbtEyMjK0b7/9Vtu4caM2depUberUqT4ctW/de++92vLly7UjR45o27dv1+69917NZDJpX331laZp8nq5o3nVj6bJa9ea3/zmN9p3332nHTlyRFu9erU2Z84cLTExUSsqKtI0TV6z1qxfv16zWq3aww8/rB04cEB76623tPDwcO3NN9903MdTnwkSqDTz7LPPahkZGVpwcLA2adIkbe3atb4ekqEsW7ZMA874ueGGGzRNU+Vo999/v5acnKyFhIRos2fP1vbt2+fbQRtAa68ZoL366quO+9TU1Gi/+tWvtLi4OC08PFy74oortPz8fN8N2sd+9rOfaZmZmVpwcLDWq1cvbfbs2Y4gRdPk9XLH6YGKvHZnuvrqq7XevXtrwcHBWp8+fbSrr75aO3jwoON2ec1a9+mnn2ojRozQQkJCtKysLO3f//53i9s99Zlg0jRN69S8jxBCCCGEl0mOihBCCCEMSwIVIYQQQhiWBCpCCCGEMCwJVIQQQghhWBKoCCGEEMKwJFARQgghhGFJoCKEEEIIw5JARQghhBCGJYGKEEIIIQxLAhUhhBBCGJYEKkIIIYQwLAlUhBBCCGFY/x8O0RZ+5gO5pgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(y_test_pred)\n",
    "plt.plot(y_test.values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To detect overfitting, one method is to use a validation curve. This marks \"complexity\" as the x-axis, and plots training and testing scores. Typically, the two curves start apart (underfitting), converge, then diverge again as overfitting kicks in.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.pipeline import make_pipeline\n",
    "\n",
    "def PolynomialRegression(degree=2, **kwargs):\n",
    "    return make_pipeline(PolynomialFeatures(degree),\n",
    "                         LinearRegression(**kwargs))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The above code uses a scikit-learn Pipeline to create a `degree`-dimensional copy of all features. For instance, `x` with degree 3 returns features $x$, $x^2$, and $x^3$ (and $c$). A linear regression is then fit on these models."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[3, 2, 5, 3, 3]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x216bdfab950>"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Create a dataset\n",
    "params = [3, 2, 5, 3, 3]  # 5 random numbers - 5 degree polynomial\n",
    "model = np.poly1d(params)\n",
    "print(params)\n",
    "\n",
    "x_model = np.linspace(0, 10, 1000)  # x-spaced data\n",
    "y_model = model(x_model)   # Actual y values\n",
    "plt.plot(x_model, y_model, label='Model')\n",
    "\n",
    "x = (np.random.random(90) * 10)  # 1000 random points between 0 and 10, in a 2D matrix\n",
    "y = model(x) + np.random.randn(len(x)) * 5000  # Use the model, but  with noise\n",
    "plt.plot(x, y, 'ro', label=\"Data\")\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "too many positional arguments",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[46], line 9\u001b[0m\n\u001b[0;32m      7\u001b[0m x \u001b[38;5;241m=\u001b[39m x\u001b[38;5;241m.\u001b[39mreshape(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m1\u001b[39m)  \u001b[38;5;66;03m# Make 2D matrix, as required by sklearn\u001b[39;00m\n\u001b[0;32m      8\u001b[0m degree \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marange(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m20\u001b[39m)\n\u001b[1;32m----> 9\u001b[0m val_train, val_test \u001b[38;5;241m=\u001b[39m \u001b[43mvalidation_curve\u001b[49m\u001b[43m(\u001b[49m\u001b[43mPolynomialRegression\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m     10\u001b[0m \u001b[43m                                       \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mpolynomialfeatures__degree\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdegree\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcv\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m7\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m     11\u001b[0m \u001b[43m                                       \u001b[49m\u001b[43mscoring\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrms_error\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py:191\u001b[0m, in \u001b[0;36mvalidate_params.<locals>.decorator.<locals>.wrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m    188\u001b[0m func_sig \u001b[38;5;241m=\u001b[39m signature(func)\n\u001b[0;32m    190\u001b[0m \u001b[38;5;66;03m# Map *args/**kwargs to the function signature\u001b[39;00m\n\u001b[1;32m--> 191\u001b[0m params \u001b[38;5;241m=\u001b[39m \u001b[43mfunc_sig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbind\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    192\u001b[0m params\u001b[38;5;241m.\u001b[39mapply_defaults()\n\u001b[0;32m    194\u001b[0m \u001b[38;5;66;03m# ignore self/cls and positional/keyword markers\u001b[39;00m\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\inspect.py:3204\u001b[0m, in \u001b[0;36mSignature.bind\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m   3199\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mbind\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m/\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m   3200\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"Get a BoundArguments object, that maps the passed `args`\u001b[39;00m\n\u001b[0;32m   3201\u001b[0m \u001b[38;5;124;03m    and `kwargs` to the function's signature.  Raises `TypeError`\u001b[39;00m\n\u001b[0;32m   3202\u001b[0m \u001b[38;5;124;03m    if the passed arguments can not be bound.\u001b[39;00m\n\u001b[0;32m   3203\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[1;32m-> 3204\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_bind\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\inspect.py:3130\u001b[0m, in \u001b[0;36mSignature._bind\u001b[1;34m(self, args, kwargs, partial)\u001b[0m\n\u001b[0;32m   3126\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m   3127\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m param\u001b[38;5;241m.\u001b[39mkind \u001b[38;5;129;01min\u001b[39;00m (_VAR_KEYWORD, _KEYWORD_ONLY):\n\u001b[0;32m   3128\u001b[0m         \u001b[38;5;66;03m# Looks like we have no parameter for this positional\u001b[39;00m\n\u001b[0;32m   3129\u001b[0m         \u001b[38;5;66;03m# argument\u001b[39;00m\n\u001b[1;32m-> 3130\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\n\u001b[0;32m   3131\u001b[0m             \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoo many positional arguments\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28mNone\u001b[39m\n\u001b[0;32m   3133\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m param\u001b[38;5;241m.\u001b[39mkind \u001b[38;5;241m==\u001b[39m _VAR_POSITIONAL:\n\u001b[0;32m   3134\u001b[0m         \u001b[38;5;66;03m# We have an '*args'-like argument, let's fill it with\u001b[39;00m\n\u001b[0;32m   3135\u001b[0m         \u001b[38;5;66;03m# all positional arguments we have left and move on to\u001b[39;00m\n\u001b[0;32m   3136\u001b[0m         \u001b[38;5;66;03m# the next phase\u001b[39;00m\n\u001b[0;32m   3137\u001b[0m         values \u001b[38;5;241m=\u001b[39m [arg_val]\n",
      "\u001b[1;31mTypeError\u001b[0m: too many positional arguments"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import validation_curve\n",
    "\n",
    "def rms_error(model, X, y):\n",
    "    y_pred = model.predict(X)\n",
    "    return np.sqrt(np.mean((y - y_pred) ** 2))\n",
    "\n",
    "x = x.reshape(-1, 1)  # Make 2D matrix, as required by sklearn\n",
    "degree = np.arange(0, 20)\n",
    "val_train, val_test = validation_curve(PolynomialRegression(), x, y,\n",
    "                                       'polynomialfeatures__degree', degree, cv=7,\n",
    "                                       scoring=rms_error)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAEGCAYAAACkQqisAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3deXycZb3//9fnvmfL2qxdaIEulKU7pWUrVDZbEGVXNgWRAxyPx7P4kx/w9fEF9JzzFQ9+j4qKioqiIpZNREE2BVF/ZWspbaF0g9KVNm2aNmmSyczc1++P655kksxMJpNM1s/z8ZjH3HPPNTNXJsm851ru6xZjDEoppVQ+nMGugFJKqeFLQ0QppVTeNESUUkrlTUNEKaVU3jRElFJK5S0w2BUYaDU1NWby5MmDXQ2llBpWVqxYsdcYU9t1/6gLkcmTJ/PGG28MdjWUUmpYEZEP0u3X7iyllFJ50xBRSimVNw0RpZRSeRt1YyJKqYERi8XYvn07ra2tg10V1QuRSIRJkyYRDAZzKq8hopQqiO3bt1NWVsbkyZMRkcGujsqBMYZ9+/axfft2pkyZktNjtDtLKVUQra2tVFdXa4AMIyJCdXV1r1qPGiJKqYLRABl+evs70xBRSimVNw2RXHneYNdAKdULDQ0N3HvvvXk99mMf+xgNDQ1Zy9x+++288MILeT3/SKIhkivjQSI22LVQSuUoW4gkEomsj3366aepqKjIWuZrX/sa55xzTt71K5Sefrb+piHSG3GdqqjUcHHrrbeyefNm5s2bx80338xLL73EmWeeyVVXXcXs2bMBuOiiizjhhBOYOXMm9913X/tjJ0+ezN69e9myZQvHHXccN9xwAzNnzmTJkiW0tLQA8NnPfpZHH320vfwdd9zB/PnzmT17Nu+++y4AdXV1fPSjH2X+/PncdNNNHHnkkezdu7dTPROJBJ/97GeZNWsWs2fP5lvf+hYAmzZt4pxzzmHu3LnMnz+fzZs3Y4zh5ptvbi+7bNkygG4/WyKR4Oabb2bhwoXMmTOHH/3oRwDs2rWLxYsXM2/ePGbNmsVf//rXPr/POsW3N+JRCJcNdi2UGna++vu3eWfnwX59zhmHlXPHJ2ZmvP+uu+5i7dq1rFq1CrAftK+99hpr165tn756//33U1VVRUtLCwsXLuTSSy+lurq60/Ns3LiRhx56iB//+Md86lOf4rHHHuPTn/50t9erqalh5cqV3HvvvXzzm9/kJz/5CV/96lc566yzuO2223jmmWc6BVXSqlWr2LFjB2vXrgVo70a7+uqrufXWW7n44otpbW3F8zwef/xxVq1axVtvvcXevXtZuHAhixcvBuj0s913332MGTOG119/nWg0yqJFi1iyZAmPP/44S5cu5Stf+QqJRILm5uY83vnONER6Ix4d7BoopfrgxBNP7HT8wz333MNvf/tbALZt28bGjRu7hciUKVOYN28eACeccAJbtmxJ+9yXXHJJe5nHH38cgL/97W/tz3/uuedSWVnZ7XFTp07lvffe44tf/CLnn38+S5YsobGxkR07dnDxxRcD9gDA5PNdeeWVuK7LuHHj+MhHPsLrr79OeXl5p5/tueeeY/Xq1e0tpQMHDrBx40YWLlzI5z73OWKxGBdddFH7z9UXGiK9od1ZSuUlW4thIJWUlLRvv/TSS7zwwgssX76c4uJizjjjjLTHR4TD4fZt13Xbu7MylXNdl3g8DtiD93pSWVnJW2+9xbPPPsv3v/99Hn74Yb797W+nLZvt+VJ/NmMM3/3ud1m6dGm3ci+//DJPPfUUn/nMZ7j55pu55ppreqxjNjom0huJtsGugVIqR2VlZTQ2Nma8/8CBA1RWVlJcXMy7777LK6+80u91OO2003j44YcB2zrYv39/tzJ79+7F8zwuvfRS/uM//oOVK1dSXl7OpEmTeOKJJwCIRqM0NzezePFili1bRiKRoK6ujpdffpkTTzyx23MuXbqUH/zgB8RidjLQhg0bOHToEB988AFjx47lhhtu4Prrr2flypV9/hm1JdIb8SgYA3oAlVJDXnV1NYsWLWLWrFmcd955nH/++Z3uP/fcc/nhD3/InDlzOOaYYzj55JP7vQ533HEHV155JcuWLeMjH/kIEyZMoKys87jqjh07uO666/D8wwi+/vWvA/DLX/6Sm266idtvv51gMMgjjzzCxRdfzPLly5k7dy4iwn//938zfvz49oH8pH/4h39gy5YtzJ8/H2MMtbW1PPHEE7z00kvcfffdBINBSktL+cUvftHnn1FyaW6NJAsWLDB5nZQqEYfda2DsDAiEey6v1Ci3bt06jjvuuMGuxqCKRqO4rksgEGD58uV8/vOfbx/oH8rS/e5EZIUxZkHXstoS6a14q4aIUionW7du5VOf+hSe5xEKhfjxj3882FXqdxoivaUztJRSOZo+fTpvvvnmYFejoHRgvbc0RJRSqp2GSG9piCilVDsNkd7SY0WUUqqdhkhveTFd0VcppXwaIvnQ1ohSQ15floIH+Pa3v91pbalclocfjTRE8pHQcRGlhrr+DpFclocfDMklVgaLhkg+dHBdqSGv61LwAHfffXf78uh33HEHAIcOHeL8889n7ty5zJo1i2XLlnHPPfewc+dOzjzzTM4880wgt+XhX3/9debMmcMpp5zSvmR7V5mWY3/mmWeYP38+c+fO5eyzzwagvr6eiy66iDlz5nDyySezevVqAO68805uvPFGlixZwjXXXENdXR2XXnopCxcuZOHChfz9738H4C9/+Qvz5s1j3rx5HH/88VmXgcmXHieSDw0RpXrnj7fCh2v69znHz4bz7sp4d9el4J977jk2btzIa6+9hjGGCy64gJdffpm6ujoOO+wwnnrqKcCuqTVmzBj+53/+hxdffJGamppuz51pefjrrruO++67j1NPPZVbb701bb1+/etfd1uOva6ujhtuuIGXX36ZKVOmUF9fD9hlU44//nieeOIJ/vznP3PNNde0/zwrVqzgb3/7G0VFRVx11VX8+7//O6eddhpbt25l6dKlrFu3jm9+85t8//vfZ9GiRTQ1NbWvBtyfNETyoSGi1LDz3HPP8dxzz3H88ccD0NTUxMaNGzn99NP58pe/zC233MLHP/5xTj/99B6fK93y8A0NDTQ2NnLqqacCcNVVV/GHP/yh22PTLcf+0ksvsXjx4val3KuqqgC79Ptjjz0GwFlnncW+ffs4cOAAABdccAFFRUUAvPDCC7zzzjvtr3Hw4EEaGxtZtGgRX/rSl7j66qu55JJLmDRpUl7vXTYaIvnQgXWleidLi2GgGGO47bbbuOmmm7rdt2LFCp5++mluu+02lixZwu233571udItD5/rOoSLFy/uthx7RUUFkmZh13TPmSyXuvS753ksX768PVSSbr31Vs4//3yefvppTj75ZF544QWOPfbYnOqZq4KNiYjI/SKyR0TWpuy7W0TeFZHVIvJbEalIue82EdkkIutFZGnK/nP9fZtE5NaU/VNE5FUR2Sgiy0QkVKifpRuTsAsyKqWGrK5LwS9dupT777+fpqYmwK6eu2fPHnbu3ElxcTGf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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_with_err(x, data, **kwargs):\n",
    "    mu, std = data.mean(1), data.std(1)\n",
    "    lines = plt.plot(x, mu, '-', **kwargs)\n",
    "    plt.fill_between(x, mu - std, mu + std, edgecolor='none',\n",
    "                     facecolor=lines[0].get_color(), alpha=0.2)\n",
    "\n",
    "plot_with_err(degree, val_train, label='training scores')\n",
    "plot_with_err(degree, val_test, label='testing scores')\n",
    "plt.xlabel('degree'); plt.ylabel('rms error')\n",
    "plt.legend();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note in the above, that the errors start to diverge around degree 5. This is a little \"late\" (I would choose degree = 3 based on this graph), but it gives a sense that values any higher are overfitting. This is because the training and testing scores are diverging after this point.\n",
    "\n",
    "With graphs like these, you can reduce the overall training error with more data, and you can make the graphs converge with a better fitting model.\n",
    "\n",
    "Note that once you use testing data to do any training, it can't be used for evaluation. In this case, we would be using our test set to decide the degree of the polynomial. After this point, that testing data has been used in training, and you would need *more* data to give a proper evaluation of the expected performance of the model.\n",
    "\n",
    "Note that, as we have seen, overfitting can happen if your model is too complex, or if you have too many variables, or - as we saw above - too many variants of specific variables. Keep the theory in mind - before adding to a model, ensure you have a good theoretic reason for doing so."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise\n",
    "\n",
    "1. Using \"number of other stocks\" as the \"degree\", fit the AAPL price to a number of random stocks. Keep the \"random\" stocks consistent throughout the testing though! After how many stocks do we start overfitting?\n",
    "2. A similar experiment can be performed with \"number of data points\" on the x-axis and train/test error. Create this plot, varying the size of the dataset. This plot tells us whether collecting more data will assist or not with improving the error, which can be critical in determining if funds need to be spent in this area."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Linear Regression vs Ridge Regression\n",
    "\n",
    "One example of an algorithm that can reduce the problem of overfitting is Ridge Regression. It can be summarised as \"Linear Regression, but you are penalised for high $\\beta$ values\". Ridge Regression helps when your overfitting problem is caused by too many variables (not so much for model complexity). There are several algorithms of this type, that penalise attributes that could cause overfitting.\n",
    "\n",
    "Given the normal $SSE$ value that Linear Regression models minimise, Ridge Regression instead aims to minimise:\n",
    "\n",
    "$SSE_R = SSE + \\lambda m^2$\n",
    "\n",
    "Where $m$ is the slope of the curve (or the sum of slopes of curves), and $\\lambda$ is a tunable parameter. Setting it high penalises high slopes, leading to \"flatter\" models being learned. If $\\lambda=0$, then the algorithm is exactly the same as a Linear Regression. \n",
    "\n",
    "Generally, you would fit $\\lambda$ to your data using a cross-fold validation to choose the best value.\n",
    "\n",
    "As an interesting, if perhaps not useful sidenote, Ridge Regression can also fit with as little as one data point. Linear Regression cannot, because there are infinite lines going through a single point, and any of them minimise $SSE$. However, only one minimises $SSE_R$ (when $\\lambda > 0$)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise\n",
    "\n",
    "1. Fit Linear Regression and Ridge Regression to a small dataset, with a positive, non-zero $\\lambda$ value and compare the lines of best fit.\n",
    "2. Investigate Grid Search in scikit-learn, and use it to fit the best value of $\\lambda$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*For solutions, see `solutions/overfitting_three.py`*"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
